您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何在java8項(xiàng)目中就那個(gè)List轉(zhuǎn)換為map ,此處通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下:
Java的特點(diǎn)有哪些 1.Java語(yǔ)言作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,實(shí)現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 2.Java具有簡(jiǎn)單性、面向?qū)ο?、分布式、安全性、平臺(tái)獨(dú)立與可移植性、動(dòng)態(tài)性等特點(diǎn)。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
利用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<Apple> 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);
1、分組
List里面的對(duì)象元素,以某個(gè)屬性來(lái)分組,例如,以id分組,將id相同的放在一起:
//List 以ID分組 Map<Integer,List<Apple>> Map<Integer, List<Apple>> 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}]}
2、List轉(zhuǎn)Map
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<Integer, Apple> 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}}
3、過(guò)濾Filter
從集合中過(guò)濾出來(lái)符合條件的元素:
//過(guò)濾出符合條件的數(shù)據(jù) List<Apple> 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}]
4.求和
將集合中的數(shù)據(jù)按照某個(gè)屬性求和:
//計(jì)算 總金額 BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add); System.err.println("totalMoney:"+totalMoney); //totalMoney:17.48
5.查找流中最大 最小值
Collectors.maxBy 和 Collectors.minBy 來(lái)計(jì)算流中的最大或最小值。
Optional<Dish> maxDish = Dish.menu.stream(). collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories))); maxDish.ifPresent(System.out::println); Optional<Dish> minDish = Dish.menu.stream(). collect(Collectors.minBy(Comparator.comparing(Dish::getCalories))); minDish.ifPresent(System.out::println);
6.去重
import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; // 根據(jù)id去重 List<Person> unique = appleList.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new) );
到此這篇關(guān)于如何在java8項(xiàng)目中就那個(gè)List轉(zhuǎn)換為map 的文章就介紹到這了,更多相關(guān)如何在java8項(xiàng)目中就那個(gè)List轉(zhuǎn)換為map 的內(nèi)容請(qǐng)搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。