java stream 找出list1中包含list2中某个字段,组成一个新的list
时间: 2023-09-08 10:16:50 浏览: 85
假设你有两个List,一个是list1,一个是list2,且它们的元素类型为T1和T2。你想要找出list1中包含list2中某个字段的元素,并将它们组成一个新的List。你可以使用Java 8中的Stream API来实现:
```
List<T1> result = list1.stream()
.filter(t1 -> list2.stream().anyMatch(t2 -> t2.getField().equals(t1.getField())))
.collect(Collectors.toList());
```
这个代码片段中,我们首先使用list1的stream()方法创建一个Stream<T1>对象,然后调用filter()方法,传入一个Predicate<T1>对象。这个Predicate<T1>对象的作用是过滤掉那些不符合条件的元素,只留下那些包含list2中某个字段的元素。
在这个Predicate<T1>对象中,我们调用list2的stream()方法创建一个Stream<T2>对象,然后调用anyMatch()方法,传入一个Predicate<T2>对象。这个Predicate<T2>对象的作用是判断某个元素是否包含了我们需要查找的字段。如果list1中的某个元素符合这个条件,那么它就会被留下来,组成一个新的List<T1>对象,最后使用collect()方法将这个新的List<T1>对象收集起来。
相关问题
java stream 找出list1包含list2中某个字段
可以使用 Java 8 中的 Stream API 和 Lambda 表达式来实现这个需求。假设 list1 和 list2 都是 List 类型,其中 list2 中的元素包含一个字段叫做 field,代码如下:
```java
List<String> matchedList = list1.stream()
.filter(item -> list2.stream().anyMatch(subItem -> subItem.getField().equals(item.getField())))
.map(Item::getField)
.collect(Collectors.toList());
```
这段代码中,首先使用 `stream()` 方法将 list1 转换成流,然后使用 `filter()` 方法和 `anyMatch()` 方法过滤出 list2 中包含与当前元素 field 相同的子元素的项。接着使用 `map()` 方法将匹配的项的 field 字段提取出来,最后使用 `collect()` 方法将结果收集到一个新的 List 中。
需要注意的是,这里的 `Item` 类需要根据实际情况进行替换,并且需要保证 list1 和 list2 中的元素都有 getField() 方法来获取 field 字段的值。
java stream 2个list中某个字段比较
可以使用Java 8中的Stream API来比较两个List中某个字段的值。
假设有两个List,每个List中都包含一个Person对象,Person对象有一个名字属性。我们可以使用Stream API将两个List中的Person对象按名字进行比较。
代码示例:
```
List<Person> list1 = new ArrayList<>();
list1.add(new Person("Alice"));
list1.add(new Person("Bob"));
list1.add(new Person("Charlie"));
List<Person> list2 = new ArrayList<>();
list2.add(new Person("Bob"));
list2.add(new Person("Charlie"));
list2.add(new Person("David"));
List<String> names1 = list1.stream().map(Person::getName).collect(Collectors.toList());
List<String> names2 = list2.stream().map(Person::getName).collect(Collectors.toList());
names1.retainAll(names2);
System.out.println("共同的名字:" + names1);
```
在上面的代码中,我们首先使用Stream API将每个List中的Person对象的名字提取出来,然后使用retainAll()方法比较两个List中的名字是否相同,最后输出共同的名字。
输出结果:
```
共同的名字:[Bob, Charlie]
```
注意,这里我们只比较了名字是否相同,如果需要比较其他属性,可以在map()方法中指定相应的属性。
阅读全文