最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中如何用Stream分組并求各組數(shù)量

 更新時(shí)間:2023年07月14日 11:10:03   作者:jeromewontstop  
這篇文章主要給大家介紹了關(guān)于Java中如何用Stream分組并求各組數(shù)量的相關(guān)資料,文中通過實(shí)例代碼,對(duì)大家學(xué)習(xí)或者Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

比如給了我一個(gè)班級(jí)的所有人的姓氏和姓名對(duì)象集合,根據(jù)這個(gè)集合求出各姓氏有多少人。直接上代碼。

User的實(shí)體類對(duì)象為

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String firstName; // 姓氏
    private String name; // 姓名
}
List<User> userList = new ArrayList<>();
userList.add(new User("張","張三"));
userList.add(new User("張","張四"));
userList.add(new User("張","張五"));
userList.add(new User("李","李一"));
userList.add(new User("李","李二"));
Map<String, Integer> groupCount = userList.stream()
        .collect(Collectors.toMap(User::getFirstName, el -> 1, Integer::sum));
System.out.println(groupCount);

輸出的結(jié)果為:

即姓張的有3個(gè),姓李的有兩個(gè)。

詳解: 將該集合的stream流用Collectors對(duì)象轉(zhuǎn)成Map,用User對(duì)象的firstName作為Key,默認(rèn)鍵值為1,在處理鍵沖突的函數(shù)中,將上一次的值與默認(rèn)值1相加。比如處理第一個(gè)姓張的人的時(shí)候,默認(rèn)值為1,處理第二個(gè)也是姓張的人的時(shí)候默認(rèn)值也是1,將1和1相加得2,(即有兩個(gè)姓張的人了),處理第三個(gè)姓張的人的時(shí)候,將上次的結(jié)果2與第三個(gè)姓張返回的默認(rèn)值1相加,得3,以此類推...得到處理結(jié)果。

附:Java中用Stream分組并求各組數(shù)量

一:多字段分組統(tǒng)計(jì)

方法一

public static void main(String[] args) {
       List<Test> list = new ArrayList<>();
        for(int i = 0; i< 5; i++){
            Test test = new Test();
            //主鍵id
            test.setId(Long.valueOf(i));
            //金額
            test.setMoney(new BigDecimal(i));
            //數(shù)量
            test.setCount(new BigDecimal(i));
            list.add(test);
        }
        for(int i = 0; i< 2; i++){
            Test test = new Test();
            //主鍵id
            test.setId(Long.valueOf(i));
            //金額
            test.setMoney(new BigDecimal(i));
            //數(shù)量
            test.setCount(new BigDecimal(i));
            list.add(test);
        }
        List<Test> resultList = new ArrayList<>();
        //先根據(jù)id分組
        Map<Long,List<Test>> map = list.stream().collect(Collectors.groupingBy(m->m.getId()));
        //分組后求 總金額,總數(shù)量
        map.keySet().stream().forEach(key->{
            Test info = new Test();
            List<Test> listInfo = map.get(key);
            //總金額
            BigDecimal sumMoney = listInfo.stream().map(Test::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
            //總數(shù)量
            BigDecimal sumCount = listInfo.stream().map(Test::getCount).reduce(BigDecimal.ZERO,BigDecimal::add);
            info.setId(key);
            info.setMoney(sumMoney);
            info.setCount(sumCount);
            resultList.add(info);
        });
        System.out.println(resultList);
    }

方法二

List<Student> collect = stus.stream().collect(Collectors.toMap(k ->k.getId()+k.getBj(), e -> e, (o1, o2) -> {
            o1.setK0qmkcje((null==o1.getK0qmkcje()?BigDecimal.ZERO:o1.getK0qmkcje()).add((null==o2.getK0qmkcje()?BigDecimal.ZERO:o2.getK0qmkcje())).setScale(0,BigDecimal.ROUND_HALF_UP));
            return o1;
        })).values().stream().collect(Collectors.toList());

獲取此類格式數(shù)據(jù) Map<String, BigDecimal>

public static void main(String[] args) {
   Map<String, BigDecimal> ageGroup = list.stream().collect(Collectors.groupingBy(Student::getName
            , Collectors.collectingAndThen(Collectors.toList()
                    , x -> x.stream().map(Student::getStature).reduce(BigDecimal.ZERO, BigDecimal::add))));
}
public static void main(String[] args) {
    Map<String, BigDecimal> ageGroup = list.stream().collect(Collectors.groupingBy(Student::getName
            , MyCollector.summingDecimal(Student::getStature)));
    System.out.println(ageGroup);
}

總結(jié)

到此這篇關(guān)于Java中如何用Stream分組并求各組數(shù)量的文章就介紹到這了,更多相關(guān)Java用Stream分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼

    Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼

    有時(shí)我們希望將把數(shù)據(jù)保存在單個(gè)連續(xù)的數(shù)組中,以便快速、便捷地訪問數(shù)據(jù),但這需要調(diào)整數(shù)組大小或者對(duì)其擴(kuò)展,下面這篇文章主要給大家介紹了關(guān)于Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼,需要的朋友可以參考下
    2022-12-12
  • Spring @Cacheable redis異常不影響正常業(yè)務(wù)方案

    Spring @Cacheable redis異常不影響正常業(yè)務(wù)方案

    這篇文章主要介紹了Spring @Cacheable redis異常不影響正常業(yè)務(wù)方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 短網(wǎng)址的原理與生成方法(Java實(shí)現(xiàn))

    短網(wǎng)址的原理與生成方法(Java實(shí)現(xiàn))

    這篇文章主要給大家介紹了關(guān)于短網(wǎng)址的原理與生成方法,利用的是Java實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)好用的MybatisPlus代碼生成器

    Java實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)好用的MybatisPlus代碼生成器

    這篇文章主要介紹了Java實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)好用的MybatisPlus代碼生成器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 創(chuàng)建SpringBoot多模塊項(xiàng)目實(shí)現(xiàn)方式

    創(chuàng)建SpringBoot多模塊項(xiàng)目實(shí)現(xiàn)方式

    這篇文章主要介紹了創(chuàng)建SpringBoot多模塊項(xiàng)目實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • idea常用的18個(gè)設(shè)置(程序員必不可少)

    idea常用的18個(gè)設(shè)置(程序員必不可少)

    這篇文章主要給大家介紹了關(guān)于idea常用的18個(gè)設(shè)置,這些對(duì)程序員們來(lái)說必不可少,idea開發(fā)常用基本且非常實(shí)用的配置,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Java調(diào)用shell命令涉及管道、重定向時(shí)不生效問題及解決

    Java調(diào)用shell命令涉及管道、重定向時(shí)不生效問題及解決

    這篇文章主要介紹了Java調(diào)用shell命令涉及管道、重定向時(shí)不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot中定時(shí)任務(wù)@Scheduled注解的使用解讀

    SpringBoot中定時(shí)任務(wù)@Scheduled注解的使用解讀

    這篇文章主要介紹了SpringBoot中定時(shí)任務(wù)@Scheduled注解的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MyBatis中關(guān)于SQL的寫法總結(jié)

    MyBatis中關(guān)于SQL的寫法總結(jié)

    這篇文章主要介紹了MyBatis中關(guān)于SQL的寫法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • JAVA?ServLet創(chuàng)建一個(gè)項(xiàng)目的基本步驟

    JAVA?ServLet創(chuàng)建一個(gè)項(xiàng)目的基本步驟

    Servlet是Server Applet的簡(jiǎn)稱,是運(yùn)行在服務(wù)器上的小程序,用于編寫Java的服務(wù)器端程序,它的主要作用是接收并響應(yīng)來(lái)自Web客戶端的請(qǐng)求,下面這篇文章主要給大家介紹了關(guān)于JAVA?ServLet創(chuàng)建一個(gè)項(xiàng)目的基本步驟,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

平武县| 花莲市| 彭水| 镇康县| 沂源县| 南汇区| 南岸区| 象山县| 潜江市| 太保市| 仁寿县| 唐海县| 铅山县| 郴州市| 普定县| 华宁县| 赤城县| 南开区| 若羌县| 奎屯市| 遂宁市| 电白县| 罗田县| 莒南县| 广德县| 新民市| 馆陶县| 潮州市| 新安县| 镇赉县| 榆树市| 个旧市| 唐海县| 谷城县| 广宗县| 德保县| 砀山县| 榆中县| 怀来县| 绩溪县| 麻城市|