日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

java8-StreamAPI之collection归约操作

發布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 java8-StreamAPI之collection归约操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一說明

經過前一篇的StreamAPI學習,基本的流操作我相信大家都熟練于心了,那么今天是要詳細解析一下收集器(collect)這么API
前提要區分,collect(StreamAPI)與collection(集合),collectors(StreamAPI靜態工廠是一種歸約操作)是個不同的東西

二 Collect

初始化信息

    public List<Car> InitCar(){
        ArrayList<Car> carList = new ArrayList<>();
        Car car1 = new Car("100", "black", "中國", 20);
        Car car2 = new Car("101", "gray", "中國", 30);
        Car car3 = new Car("102", "yello", "中國", 50);
        Car car4 = new Car("103", "silvery", "英國", 20);
        Car car5 = new Car("104", "red", "英國", 30);
        carList.add(car1);
        carList.add(car2);
        carList.add(car3);
        carList.add(car4);
        carList.add(car5);
        return carList;
    }

1數量

    @Test
    public void countTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求數量
        Long count = cars.stream().collect(Collectors.counting());
        System.out.println(count);//5
    }

2 最大值

    @Test
    public void maxTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求車價格最大值的車
        Comparator<Car> carComparator = Comparator.comparingDouble(Car::getPrice);
        Optional<Car> maxOptional = cars.stream().collect(Collectors.maxBy(carComparator));
        // Car(code=102, color=yello, factory=中國, price=50.0)
        System.out.println(maxOptional.get());
    }

3 最小值

    @Test
    public void minTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求車價格最小值的車
        Comparator<Car> carComparator = Comparator.comparingDouble(Car::getPrice);
        Optional<Car> maxOptional = cars.stream().collect(Collectors.minBy(carComparator));
        // Car(code=100, color=black, factory=中國, price=20.0)
        System.out.println(maxOptional.get());
    }

4求和

   @Test
    public void sumTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求所有車價格的總和
        Double collect = cars.stream().collect(Collectors.summingDouble(Car::getPrice));
        System.out.println(collect);//150.0
    }

5求均值

    @Test
    public void avgTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求所有車價格的均值
        Double collect = cars.stream().collect(Collectors.averagingDouble(Car::getPrice));
        System.out.println(collect);//30.0
    }

6字符串連接

   @Test
    public void joinTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求所有車顏色字符串的拼接
        String collect = cars.stream().map(Car::getColor).collect(Collectors.joining(","));
        System.out.println(collect);//black,gray,yello,silvery,red
    }

7 歸約

    @Test
    public void reduceTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求所有車價格的總和
        Double collect = cars.stream()
                .collect(Collectors.reducing(0.0, Car::getPrice, (number, number2) -> number + number2));
        System.out.println(collect);//150.0
    }

8 分組

根據車的制造地分組。分為 中國和英國2組

    @Test
    public void groupingByTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 根據車的制造地分組
        Map<String, List<Car>> collect = cars.stream()
                .collect(Collectors.groupingBy(Car::getFactory));
        //{中國=[Car(code=100, color=black, factory=中國, price=20.0),
        // Car(code=101, color=gray, factory=中國, price=30.0),
        // Car(code=102, color=yello, factory=中國, price=50.0)], 
        // 英國=[Car(code=103, color=silvery, factory=英國, price=20.0),
        // Car(code=104, color=red, factory=英國, price=30.0)]}
        System.out.println(collect);
    }

9 多級分組

    @Test
    public void moreGroupingByTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 根據車的制造地分組,再根據車的價格分組
        Map<String, Map<Double, List<Car>>> collect = cars.stream()
                .collect(Collectors.groupingBy(Car::getFactory, Collectors.groupingBy(Car::getPrice)));
        //{中國={20.0=[Car(code=100, color=black, factory=中國, price=20.0)], 
        // 50.0=[Car(code=102, color=yello, factory=中國, price=50.0)], 
        // 30.0=[Car(code=101, color=gray, factory=中國, price=30.0)]}, 
        // 英國={20.0=[Car(code=103, color=silvery, factory=英國, price=20.0)], 
        // 30.0=[Car(code=104, color=red, factory=英國, price=30.0)]}}

        System.out.println(collect);
    }

10 分區

分區是分組里面的一種,只根據true,false進行分組。

    @Test
    public void groupingByAndCountTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 根據車的價格是否大于30分區
        Map<Boolean, List<Car>> collect = cars.stream()
                .collect(Collectors.partitioningBy(o -> o.getPrice() > 30));
        //{false=[Car(code=100, color=black, factory=中國, price=20.0),
        // Car(code=101, color=gray, factory=中國, price=30.0), 
        // Car(code=103, color=silvery, factory=英國, price=20.0), 
        // Car(code=104, color=red, factory=英國, price=30.0)], 
        // true=[Car(code=102, color=yello, factory=中國, price=50.0)]}
        System.out.println(collect);
    }

11 收集為List

    @Test
    public void toListTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 
        List<String> collect = cars.stream()
                .map(Car::getColor)
                .collect(Collectors.toList());
        // [black, gray, yello, silvery, red]
        System.out.println(collect);
    }

12 收集為set

    @Test
    public void toSetTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 
        Set<Double> collect = cars.stream()
                .map(Car::getPrice)
                .collect(Collectors.toSet());
        // [20.0, 50.0, 30.0]
        System.out.println(collect);
    }

13 提取key-val轉為map

    @Test
    public void toMapTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 提取新元素key,val轉為map
        Map<String, Double> collect = cars.stream()
                .collect(Collectors.toMap(Car::getColor, Car::getPrice));
        // {red=30.0, gray=30.0, black=20.0, yello=50.0, silvery=20.0}
        System.out.println(collect);
    }

14 提取元素歸約收集

    public void mapperTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 提取 元素轉為List
        List<String> collect = cars.stream()
                .collect(Collectors.mapping(Car::getColor, Collectors.toList()));
        // [black, gray, yello, silvery, red]
        System.out.println(collect);
    }

三 特別說明

之前的求和,平均值,最大值等還有一種求法,主要是 double ,int long類型。以下示例是double型。

    @Test
    public void summarizingTest(){
        List<Car> cars = carFunFactory.InitCar();
        // 求所有車價格的總和
        DoubleSummaryStatistics collect = cars.stream().collect(Collectors.summarizingDouble(Car::getPrice));
        System.out.println(collect.getSum());//150.0
        System.out.println(collect.getAverage());//30.0
        System.out.println(collect.getMax());//50.0
        System.out.println(collect.getMin());//20.0
        System.out.println(collect.getCount());//5
    }

四致謝

這次搜集器講完,打算后面再講解一下并行流,后面就會進入時間操作,有興趣愛學習的朋友可以關注我公眾號,支持一下,謝謝。

總結

以上是生活随笔為你收集整理的java8-StreamAPI之collection归约操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 神马午夜伦理影院 | 国产黄色大全 | 无码人妻精品一区二区三应用大全 | 在线免费观看国产精品 | aaaaa毛片 | 亚洲精品国产电影 | 高级毛片 | 五月婷婷在线观看 | 少妇精品偷拍高潮白浆 | 可以看毛片的网站 | 久久久九九九九 | 欧美黄色录像 | 美女三级黄色片 | 少妇无码一区二区三区 | 国产美女视频91 | 清冷学长被爆c躁到高潮失禁 | 久久最新 | 在线网站黄 | 国产做爰xxxⅹ高潮视频12p | 精品三区 | 性一交一乱一色一免费无遮挡 | 国产成人无码一区二区三区在线 | 欧美精品一区二区在线播放 | 性视频欧美 | 四虎成人永久免费视频 | 久久久99精品 | 黄色网战在线观看 | 天天操天天草 | 密臀久久 | mm131国产精品 | 国产第一精品 | 日本三级久久久 | 字幕网在线 | 午夜免费视频 | 亚洲国产电影在线观看 | 黄色片一区 | 草草影院在线 | 456亚洲影院| 一道本在线观看视频 | 欧美一级在线播放 | 中国av免费看 | 成人黄色免费网址 | 孕妇疯狂做爰xxxⅹ 国产精品乱码久久久久久 99久久久成人国产精品 | 91麻豆国产视频 | 三级精品视频 | 色吧综合网 | 亚洲不卡在线 | av色成人| 免费在线视频一区二区 | 亚洲精品久久久久av无码 | 亚洲一区在线播放 | 李丽珍裸体午夜理伦片 | jizz欧美性20| 大又大又粗又硬又爽少妇毛片 | 成人片黄网站色大片免费毛片 | 国产精品一区久久 | 成人免费小视频 | 欧美黄视频 | 中文字幕高清在线 | 91字幕网 | 欧美成人免费一级 | 亚洲欧美日韩成人 | 风韵丰满熟妇啪啪区老熟熟女 | 日韩在线观看视频免费 | 国产精品视频999 | 中文字幕在线视频免费 | 欧美人与禽猛交乱配 | 中文字幕在线观看精品 | 国产做受视频 | 亚洲色图在线视频 | 中文字幕一区二区三区人妻四季 | www.youjizz日本 | 国产一区二区三区观看 | 狠狠五月 | 精品一区中文字幕 | 国产日皮视频 | 精品人妻码一区二区三区红楼视频 | 成人在线免费观看网址 | 厨房性猛交hd | 黄色精品视频在线观看 | 日韩www | 国产自产视频 | 亚洲国产一二三区 | 国产一级片免费观看 | 先锋影音av资源在线 | 四虎免看黄 | 国产视频第一区 | 久久ww| 亚洲精品视频久久久 | 国产69久久| 国产成人av片 | 亚洲成人一区二区在线观看 | 午夜理伦三级理论 | 久久精品波多野结衣 | 成人毛片a| 淫岳高潮记小说 | 国产午夜一级一片免费播放 | 免费污视频在线观看 | 亚洲50p|