从列表生成列表

时间:2018-09-24 22:07:18

标签: java java-8 java-stream

我一直在搜索,却找不到一种智能方法来拆分列表。

假设我们有以下示例:

public class Person {
    private String name;
    private int age;
    private String gender;

    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // Getters/setters
}

所以我有:

List<Person> personList = new ArrayList<>();
personList.add(new Person("Adam", 30, "male"));
personList.add(new Person("John", 32, "male"));
personList.add(new Person("Monica", 30, "female"));
personList.add(new Person("Sophia", 20, "female"));
personList.add(new Person("Carol", 25, "female"));

有没有一种方法可以使用Stream API将男性和女性分组来生成两个新的Person列表?

2 个答案:

答案 0 :(得分:4)

如果我是你,我将流List并使用Collectors.partitioningBy将其收集到Map<Boolean, List<Person>>,其中男性是true(或{{1} }),而雌性则与雄性相反。就像下面这样简单:

false

打印此代码将返回以下内容(在实现personList.stream() .collect(Collectors.partitioningBy(person -> "male".equals(person.getGender()))); 之后):

Person#toString

答案 1 :(得分:4)

为简短起见,很抱歉,但是我在回家的火车上。

1st Number : <input type="number" id="firstNumber" >
2nd Number: <input type="number" id="secondNumber" >

和代码

Map<String, List<Person>> map = list.stream()
    .collect(Collectors.groupingBy(Person::getGender));