Java Stream: divide into two lists by boolean predicate

后端 未结 4 2077
温柔的废话
温柔的废话 2020-12-01 13:54

I have a list of employees. They have isActive boolean field. I would like to divide employees into two lists: activeEmployees

4条回答
  •  没有蜡笔的小新
    2020-12-01 14:37

    If you are open to using a third-party library, this will work using Collectors2.partition from Eclipse Collections.

    PartitionMutableList partition =
            employees.stream().collect(
                    Collectors2.partition(Employee::isActive, PartitionFastList::new));
    
    List activeEmployees = partition.getSelected();
    List formerEmployees = partition.getRejected();
    

    You can also simplify things using ListIterate.

    PartitionMutableList partition =
            ListIterate.partition(employees, Employee::isActive);
    
    List activeEmployees = partition.getSelected();
    List formerEmployees = partition.getRejected();
    

    PartitionMutableList is a type that extends from PartitionIterable. Every subtype of PartitionIterable has a collection for positive results getSelected() and negative results getRejected().

    Note: I am a committer for Eclipse Collections.

提交回复
热议问题