這篇文章主要講解了“Java8怎么快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java8怎么快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作”吧!
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了萬(wàn)榮免費(fèi)建站歡迎大家使用!
利用java8新特性,可以用簡(jiǎn)潔高效的代碼來(lái)實(shí)現(xiàn)一些數(shù)據(jù)處理。
定義1個(gè)Apple對(duì)象:
public class Apple {
private Integer id;
private String name;
private BigDecimal money;
private Integer num;
public Apple(Integer id, String name, BigDecimal money, Integer num) {
this.id = id;
this.name = name;
this.money = money;
this.num = num;
}
}
添加一些測(cè)試數(shù)據(jù):
List
appleList =
new ArrayList<>();
//存放apple對(duì)象集合
Apple apple1 =
new Apple(
1,
"蘋果1",
new BigDecimal(
"3.25"),
10);
Apple apple12 =
new Apple(
1,
"蘋果2",
new BigDecimal(
"1.35"),
20);
Apple apple2 =
new Apple(
2,
"香蕉",
new BigDecimal(
"2.89"),
30);
Apple apple3 =
new Apple(
3,
"荔枝",
new BigDecimal(
"9.99"),
40);
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);
List里面的對(duì)象元素,以某個(gè)屬性來(lái)分組,例如,以id分組,將id相同的放在一起:
//List 以ID分組 Map<integer,list
>
Map<integer, list
> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));
System.err.println(
"groupBy:"+groupBy);
{
1=[Apple{id=
1, name=
'蘋果1', money=
3.25, num=
10}, Apple{id=
1, name=
'蘋果2', money=
1.35, num=
20}],
2=[Apple{id=
2, name=
'香蕉', money=
2.89, num=
30}],
3=[Apple{id=
3, name=
'荔枝', money=
9.99, num=
40}]}
id為key,apple對(duì)象為value,可以這么做:
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合對(duì)象有重復(fù)的key,會(huì)報(bào)錯(cuò)Duplicate key ....
* apple1,apple12的id都為1。
* 可以用 (k1,k2)->k1 來(lái)設(shè)置,如果有重復(fù)的key,則保留key1,舍棄key2
*/
Map appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
打印appleMap
{1=Apple{id=1, name='蘋果1', money=3.25, num=10}, 2=Apple{id=2, name='香蕉', money=2.89, num=30}, 3=Apple{id=3, name='荔枝', money=9.99, num=40}}
從集合中過(guò)濾出來(lái)符合條件的元素:
//過(guò)濾出符合條件的數(shù)據(jù)
List
filterList = appleList.stream().filter(a -> a.getName().equals(
"香蕉")).collect(Collectors.toList());
System.err.println(
"filterList:"+filterList);
[Apple{id=
2, name=
'香蕉', money=
2.89, num=
30}]
將集合中的數(shù)據(jù)按照某個(gè)屬性求和:
//計(jì)算 總金額
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println("totalMoney:"+totalMoney); //totalMoney:17.48
Collectors.maxBy 和 Collectors.minBy 來(lái)計(jì)算流中的最大或最小值。搜索Java知音公眾號(hào),回復(fù)“后端面試”,送你一份Java面試題寶典
Optional maxDish = Dish.menu.stream().
collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories)));
maxDish.ifPresent(System.out::println);
Optional minDish = Dish.menu.stream().
collect(Collectors.minBy(Comparator.comparing(Dish::getCalories)));
minDish.ifPresent(System.out::println);
import static java.util.Comparator.comparingLong;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;
// 根據(jù)id去重
List unique = appleList.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new)
);
下表展示 Collectors 類的靜態(tài)工廠方法。
感謝各位的閱讀,以上就是“Java8怎么快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java8怎么快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享文章:Java8怎么快速實(shí)現(xiàn)List轉(zhuǎn)map、分組、過(guò)濾等操作
文章位置:http://www.rwnh.cn/article16/ghcdgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、企業(yè)建站、虛擬主機(jī)、App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)