我正在努力比较多个列表中的键/值,可能需要一些帮助。给定一个People
的列表,它有一个firstName
和age
属性,以及一个单独的年龄列表,我如何过滤People
列表以只返回那些具有其中一个匹配年龄的列表?
public class Main {
public static void main(String[] args) {
Person p1 = new Person("John", 25);
Person p2 = new Person("Lisa", 54);
Person p3 = new Person("Mike", 61);
List<Person> people = new ArrayList<Person>();
people.add(p1);
people.add(p2);
people.add(p3);
List<Integer> ages = Arrays.asList(25, 54);
List<Person> specificAges = people.stream().filter(p -> p.age == ages?????)
System.out.println(specificAges);
}
}
public class Person {
private String firstName;
private Integer age;
public Person(String firstName, Integer age) {
this.firstName = firstName;
this.age = age;
}
@Override
public String toString() {
return firstName + " " + age;
}
}
预期结果:["John 25", "Lisa 54"]
4条答案
按热度按时间n53p2ov01#
可以在lambda函数中使用
ages.contains(p.age)
。我使用getter方法来获取每个
Person
类的年龄。oalqel3c2#
如果 stream 不是必需的,那么 for-loop 也足够了。
输出量
pbwdgjma3#
您还可以创建一个单独的Person类,并使用注解进行快速构造函数、getter/setter开发。
代码的其余部分将保持不变。您可以使用一个流为每个循环,如前所述。
wgmfuz8q4#
对于“更少代码”的解决方案,创建一个副本,然后使用
removeIf()
:如果不需要保留原始列表,只需: