模型类
class Person {
private String id;
private String name;
private int age;
// Constructor
public Person(String id,String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// Getter ve Setter metotları
public String getID() {
return id;
}
public void setID(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
字符串
这里是主要的:
public static void main(String[] args) {
ArrayList<Person> personList = new ArrayList<>();
personList.add(new Person("1","John", 25));
personList.add(new Person("2","Alice", 30));
personList.add(new Person("3","Bob", 28));
}
型
我想像这样过滤-filterednewArraylist = (id =1 in person list)
。
我尝试了收集和流过滤器,但它不工作。
4条答案
按热度按时间7fyelxc51#
正如你所指出的,流和过滤是要走的路:
字符串
如果你必须有一个
ArrayList
,而不是任何旧的列表(这可能不是一个好主意,例如What does it mean to "program to an interface"?),你可以使用toCollection
而不是toList
:型
2sbarzqh2#
正如你提到的,你也可以用收藏的方式。这种方式更清晰,更容易,更简短。
字符串
ut6juiuv3#
要过滤personList以获得仅包含ID为“1”的人员的新ArrayList,可以使用Java流和filter方法。
字符串
atmip9wb4#
在现代Java(JDK 17/21)中过滤
List
的正确方法如下:字符串
这是一种函数式方法。过滤后的结果是原始列表的不可变副本。我使用以下代码简化了这一点:
Person
record
(JDK 14)List.of
(JDK 9)Stream::toList
(JDK 16)可变性
我们甚至根本不需要显式地使用
ArrayList
。除非你需要修改结果,否则你应该将结果集合传递给一个新的ArrayList
。型
高级用法
如果你想合并组合一个访问器/Map器和一个 predicate ,你可以尝试下面的方法。
**注意:**这不适用于记录,因为
Person::age
不能从静态上下文引用。您将需要像Person::getAge
这样的方法访问器。型