我們經常在作業中會碰到這種情況:讓我將物件結合中的物件按照物件的某個屬性的值進行操作,然后根據值對集合中的物件進行分組,
這種情況聽上去不是很難,但是在做起來的時候就會很麻煩,對不清楚Java8新特性的朋友來說,你可能會遍歷陣列對物件屬性進行操作判斷,然后在創建幾個List物件去存盤分組后的物件,這可能需要十幾行代碼,
然而今天,我們來學習一下Java8的其中一個新特性:集合的流式編程,讓這種操作只要幾行代碼搞定,
一. 準備階段
1.準備好一個物體類
public class Person{
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
2.準備好一個集合
ArrayList<Person> people = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
Person person = new Person();
person.setAge(i);
String l = i % 2 == 0 ? "偶數" : "奇數";
person.setName(l+"-"+i);
people.add(person);
}
這里我回圈插入了一百個物件,物件的age直接賦值為每次回圈的i值,name值則為當前i是否為偶數再加上“-”和當前i的值,
二. 實操階段
操作一:對person的age屬性進行操作,將根據age的奇偶性進行分組
Map<Boolean, List<Person>> collect = people.stream().collect(Collectors.groupingBy(l -> {
Integer age = l.getAge();
return age % 2 == 0;
}));
好了,分完組后,他會回傳一個Map集合,key值是分組的所依據的值,value就是分好組后的集合,接下來讓我看看結果
List<Person> personList1 = collect.get(true);
List<Person> personList2 = collect.get(false);
personList1.forEach(System.out::println);
System.out.println("===============");
personList2.forEach(System.out::println);
Person{age=2, name='偶數-2'}
Person{age=4, name='偶數-4'}
Person{age=6, name='偶數-6'}
Person{age=8, name='偶數-8'}
...
===============
Person{age=1, name='奇數-1'}
Person{age=3, name='奇數-3'}
Person{age=5, name='奇數-5'}
Person{age=7, name='奇數-7'}
Person{age=9, name='奇數-9'}
...
這里由于每個集合中都有50個物件,所以我就挑了前面幾條進行展示,
操作二:在name中獲得“-”后的數字,并根據其對5取余的值進行分組
Map<Integer, List<Person>> collect = people.stream().collect(Collectors.groupingBy(l -> {
String name = l.getName();
String[] split = name.split("-");
int parseInt = Integer.parseInt(split[1]);
return parseInt % 5;
}));
Person{age=5, name='奇數-5'}
Person{age=10, name='偶數-10'}
Person{age=15, name='奇數-15'}
Person{age=20, name='偶數-20'}
...
============
Person{age=1, name='奇數-1'}
Person{age=6, name='偶數-6'}
Person{age=11, name='奇數-11'}
Person{age=16, name='偶數-16'}
============
Person{age=2, name='偶數-2'}
Person{age=7, name='奇數-7'}
Person{age=12, name='偶數-12'}
Person{age=17, name='奇數-17'}
...
============
Person{age=3, name='奇數-3'}
Person{age=8, name='偶數-8'}
Person{age=13, name='奇數-13'}
Person{age=18, name='偶數-18'}
...
============
Person{age=4, name='偶數-4'}
Person{age=9, name='奇數-9'}
Person{age=14, name='偶數-14'}
Person{age=19, name='奇數-19'}
...
通過這種方法,無論你對需要分組的屬性值進行多復雜的計算或操作,只要最后他們回傳的結果一致,他們就會分到一個組中,并且組名就是他們的回傳值,
如果對你有用的話麻煩點個贊把,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/241996.html
標籤:java
上一篇:《我的世界》Python編程入門(1)Minecraft(我的世界)Python編程環境搭建
下一篇:Java并發編程-多執行緒基礎
