How do I create two different compliementary lists using same input

前端 未结 2 1072
轮回少年
轮回少年 2021-01-12 14:18

In my previous question - How to filter the age while grouping in map with list I was able to find the name to age groups using List users. Now I am

2条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-12 14:59

    List.removeAll

    You can use removeAll to obtain the complimentary list.

    List userBelowThreshold = new ArrayList<>(users); // initiated with 'users'
    userBelowThreshold.removeAll(userAboveThreshold);
    

    Note: This would require overridden equals and hashCode implementation for User.


    Collectors.partitioningBy

    On the other hand, if you further want to iterate over the complete users list just once, you can use Collectors.partitioningBy as:

    Map> userAgeMap = users.stream()
            .collect(Collectors.partitioningBy(user -> user.getAge() > 21, Collectors.toList()));
    List userAboveThreshold = userAgeMap.get(Boolean.TRUE);
    List userBelowThreshold = userAgeMap.get(Boolean.FALSE);
    

提交回复
热议问题