.stream().filter 多个字段相等
时间: 2023-11-01 20:58:11 浏览: 37
多个字段相等的话,可以使用stream().filter()方法来实现。你可以使用lambda表达式来定义过滤条件,通过多个字段同时判断是否相等。
例如,假设你有一个包含多个对象的列表,每个对象都有两个字段name和age,你想要筛选出name字段为"John"且age字段为25的对象,你可以使用以下代码:
List<Person> persons = new ArrayList<>();
// 添加对象到列表中
persons.add(new Person("John", 25));
persons.add(new Person("Alice", 30));
persons.add(new Person("John", 20));
// 使用stream().filter()方法进行筛选
List<Person> filteredPersons = persons.stream()
.filter(person -> person.getName().equals("John") && person.getAge() == 25)
.collect(Collectors.toList());
在上面的例子中,我们使用stream().filter()方法传入一个lambda表达式作为过滤条件,判断name字段是否为"John"且age字段是否为25。最后使用collect(Collectors.toList())将过滤后的结果收集到一个新的列表中。
相关问题
java stream 两个list对象 匹配字段是否相等
可以使用Java8的Stream API,将两个List对象转换为流,然后使用filter和anyMatch方法进行匹配。示例代码如下:
```
List<ObjectA> listA = ... ;
List<ObjectB> listB = ... ;
boolean isMatched = listA.stream()
.filter(a -> listB.stream()
.anyMatch(b -> a.getField().equals(b.getField())))
.findFirst()
.isPresent();
```
其中,ObjectA和ObjectB分别代表两个对象,getField()方法表示需要比较的字段。如果isMatched为true,则表示两个List对象有相同的字段。
java stream 两个list对象 获取匹配字段相等的数据
可以使用Java 8的Stream API来实现,具体代码如下:
```java
List<Object> list1 = Arrays.asList(obj1, obj2, obj3);
List<Object> list2 = Arrays.asList(obj1, obj4, obj5);
List<Object> result = list1.stream()
.filter(obj -> list2.stream()
.anyMatch(obj2 -> obj2.getField().equals(obj.getField())))
.collect(Collectors.toList());
```
其中,`obj.getField()`表示获取对象的匹配字段,这里假设匹配字段为`field`。`anyMatch`方法表示在`list2`中查找是否有`field`值与`list1`中的对象匹配,如果有则返回`true`,否则返回`false`。`filter`方法则根据`anyMatch`方法的结果筛选出匹配的对象,并返回一个新的List。