我一直在搜索,却找不到一种智能方法来拆分列表。
假设我们有以下示例:
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列表?
答案 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));