What is the best way to filter a Java Collection?

后端 未结 27 3339
故里飘歌
故里飘歌 2020-11-21 06:55

I want to filter a java.util.Collection based on a predicate.

27条回答
  •  广开言路
    2020-11-21 07:37

    Java 8 (2014) solves this problem using streams and lambdas in one line of code:

    List beerDrinkers = persons.stream()
        .filter(p -> p.getAge() > 16).collect(Collectors.toList());
    

    Here's a tutorial.

    Use Collection#removeIf to modify the collection in place. (Notice: In this case, the predicate will remove objects who satisfy the predicate):

    persons.removeIf(p -> p.getAge() <= 16);
    

    lambdaj allows filtering collections without writing loops or inner classes:

    List beerDrinkers = select(persons, having(on(Person.class).getAge(),
        greaterThan(16)));
    

    Can you imagine something more readable?

    Disclaimer: I am a contributor on lambdaj

提交回复
热议问题