归约和汇总

Posted i-hard-working

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归约和汇总相关的知识,希望对你有一定的参考价值。

1. 查找流中的最大值和最小值:

package com.ant.jdk8.chap06;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class MaxByMinByDemo {
    public static void main(String[] args) {
        List<Dish> menu = Arrays.asList(
                new Dish("pork", false, 800, Type.MEAT),
                new Dish("beef", false, 700, Type.MEAT),
                new Dish("chicken", false, 400, Type.MEAT),
                new Dish("french fries", true, 530, Type.OTHER),
                new Dish("rice", true, 350, Type.OTHER),
                new Dish("season fruit", true, 120, Type.OTHER),
                new Dish("pizza", true, 550, Type.OTHER),
                new Dish("prawns", false, 300, Type.FISH),
                new Dish("salmon", false, 450, Type.FISH) );
        menu.stream()
                .collect(Collectors.maxBy(Comparator.comparingInt(Dish::getCalories)))
                .ifPresent(d-> System.out.println(d.getCalories()+"->"+d.getName()));
    }
}

技术分享图片

2. 汇总:

int totalCalories = menu.stream().collect(Collectors.summingInt(Dish::getCalories));
System.out.println("totalCalories:"+totalCalories);

技术分享图片

IntSummaryStatistics menuStatistics = menu.stream().collect(Collectors.summarizingInt(Dish::getCalories));
System.out.println(menuStatistics);

技术分享图片

3. 连接字符串:

String menuStr = menu.stream().map(Dish::getName).collect(Collectors.joining(", "));
System.out.println(menuStr);

技术分享图片

4. 广义的归约汇总:

 

int totalCalories1 = menu.stream().collect(Collectors.reducing(0,Dish::getCalories,Integer::sum));
int totalCalories2 = menu.stream().map(Dish::getCalories).reduce(Integer::sum).get();
int totalCalories3 = menu.stream().mapToInt(Dish::getCalories).sum();
System.out.println(totalCalories1+","+totalCalories2+","+totalCalories3);

 

技术分享图片

 

以上是关于归约和汇总的主要内容,如果未能解决你的问题,请参考以下文章

数据挖掘(2.4)--数据归约和变换

LR分析法

《Java8实战》 - 读书笔记 - Stream流操作2:用流收集数据

读Java实战(第二版)笔记04_用流收集数据

编译原理之语法分析-自下而上分析

编译原理之语法分析-自下而上分析