java stream 找出list1包含list2中某个字段
时间: 2023-09-06 10:10:41 浏览: 53
可以使用 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 找出list1中包含list2中某个字段,组成一个新的list
假设你有两个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流,筛选出list中的某个字段
可以使用Java 8中的Stream API来对List进行筛选。假设我们有一个List<User>,每个User对象都有属性name,我们想筛选出所有名字为"Tom"的User对象的name属性,可以这样实现:
```
List<User> userList = ... // 假设我们有一个User对象的List
List<String> tomNameList = userList.stream()
.filter(user -> "Tom".equals(user.getName()))
.map(User::getName)
.collect(Collectors.toList());
```
这里使用了Stream的filter方法来过滤列表中的元素,然后使用map方法将每个User对象转换成它的名字属性,最后使用collect方法将符合条件的元素收集到一个新的List中。其中,lambda表达式 `user -> "Tom".equals(user.getName())` 表示对于每个User对象,只有它的名字是"Tom"时才会被保留,`User::getName` 表示获取User对象的name属性。最终得到的是一个名字为"Tom"的User对象的name属性的List。