【发布时间】:2018-05-22 08:33:33
【问题描述】:
我需要从给定的超级列表中获取子列表,如下所述。
假设我有一个“Person”对象的超级列表,如下所示:
List<Person> personsList = new ArrayList<>();
personsList.add(new Person("John", 28));
personsList.add(new Person("Paul", 29));
personsList.add(new Person("Adam", 30));
personsList.add(new Person("Peter", 31));
personsList.add(new Person("Pat", 32));
让Person类定义如下:
class Person {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
给定一个像这样的子列表:
String [] names = {"John", "Paul", "Adam"};
List<String> namesList = Arrays.asList(names);
我想获取名称为John、Paul 和Adam 的人员对象。
我是 Java 流的新手,这是我迄今为止为满足我的要求所做的尝试。
List<Person> finalList = personsList.stream().filter(p -> namesList.contains(p.name))
.collect(Collectors.toCollection(() -> new ArrayList<Person>()));
我得到了想要的结果,但我想知道是否有任何其他有效的方法来实现这一点(我主要认为 namesList.contains(p.name) 有点低效)。
如果有更好的方法,请告诉我。
【问题讨论】:
标签: java list arraylist java-8 java-stream