List<String> list1 = List.of("Apple","pear","ORANGE","Banana"); Stream<String> stream1 = list1.stream(); List<String> list2 = List.of("Apple","pear","peach"); System.out.println(stream1.filter(list2::contains).collect(Collectors.toList()));
时间: 2024-04-22 17:24:28 浏览: 68
你的代码使用了Java 8引入的Stream API和方法引用的语法,它的作用是将两个列表中共同包含的元素筛选出来并存储到一个新的列表中。
让我解释一下代码的执行过程:
1. 首先,你定义了一个`list1`,它包含了一些水果的名称。
2. 然后,通过`list1`创建了一个`Stream`对象`stream1`,用于操作和处理这个列表中的元素。
3. 接下来,你定义了另一个`list2`,它包含了一些水果的名称。
4. 通过`stream1.filter(list2::contains)`这一操作,你筛选出了`stream1`中那些在`list2`中也存在的元素。
- 这里使用了方法引用`list2::contains`,它相当于传递了一个lambda表达式`(element) -> list2.contains(element)`,用于判断一个元素是否在`list2`中存在。
5. 最后,通过`.collect(Collectors.toList())`将筛选出来的元素收集到一个新的列表中。
6. 最终结果会被打印输出。
假设执行结果如下:
```
[Apple, pear]
```
这表示在`list1`中,"Apple"和"pear"这两个元素同时也在`list2`中存在,它们被筛选出来并存储在新的列表中。
注意:在Java 9及之后的版本中,`List.of()`方法可以直接创建一个不可变的列表。但如果你使用的是Java 8,需要使用`Arrays.asList()`方法来创建一个可变的列表。
相关问题
java中List<string> list1和List<string> list2 取list1中含有几个list2中的值
可以使用Java 8的Stream API来实现这个功能。具体实现步骤如下:
1.使用`filter`方法过滤出`list1`中包含`list2`中值的元素。
2.使用`count`方法统计符合条件的元素个数。
代码示例:
```
List<String> list1 = Arrays.asList("apple", "banana", "orange", "pear", "peach");
List<String> list2 = Arrays.asList("banana", "pear");
long count = list1.stream()
.filter(list2::contains)
.count();
System.out.println(count); // 输出结果为2
```
解释一下上面的代码:
首先定义了两个字符串列表`list1`和`list2`,然后使用`stream`方法将`list1`转换为一个流。
接着使用`filter`方法过滤出`list1`中包含`list2`中值的元素,`list2::contains`表示使用`list2`的`contains`方法来判断。
最后使用`count`方法统计符合条件的元素个数,输出结果为2。
list<string>去重
可以使用Java 8中的Stream API来对List中的元素进行去重,代码如下:
```java
List<String> list = Arrays.asList("apple", "banana", "orange", "apple", "pear", "banana");
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
```
这里使用了Stream的distinct方法来去重,然后使用了Collectors.toList()方法将去重后的元素收集到一个新的List中。
阅读全文