У меня есть требование выбрать подсписок из заданного суперсписка, как объяснено ниже.
Допустим, у меня есть суперсписок объектов "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);
Я хотел бы получить объекты Person, имя которых равно 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) как немного неэффективный).
Пожалуйста, дайте мне знать, если есть лучший способсделать это.