溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在java8項(xiàng)目中就那個(gè)List轉(zhuǎn)換為map

發(fā)布時(shí)間:2021-02-23 15:13:52 來(lái)源:億速云 閱讀:164 作者:戴恩恩 欄目:編程語(yǔ)言

這篇文章主要介紹了如何在java8項(xiàng)目中就那個(gè)List轉(zhuǎn)換為map ,此處通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下:

Java的特點(diǎn)有哪些

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)文章希望大家以后多多支持億速云!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI