归约操作java8

1.简介

在上一篇文章中 ,我写了关于如何使用流和分组对对象集合进行分组的文章。 这很有用,但不涵盖特定的用例。 例如,有时我们不仅需要对事物进行分组,还需要将结果转换为更合适的对象。

在这篇文章中,我们将学习如何将变换和归约应用于groupingBy结果。

  • 在这里,您可以查看以下示例的源代码。

2.分组并变换

让我们在上一篇文章中,我们不得不集合所使用的模型我的人谁拥有的宠物 。

现在,我们想知道哪些宠物属于居住在纽约的人。 我们要养宠物,所以我们不能只是分组,因为我们将要归还一群人。 我们需要做的是按城市分组人员,然后将流转换为宠物集合。

为此,我们在组的结果上使用以下映射:

public void groupAndTransform(List<Person> persons) {final Map<String, List<Pet>> petsGroupedByCity = persons.stream().collect(groupingBy(Person::getCity,mapping(Person::getPet, toList())));System.out.println("Pets living in New York: " + petsGroupedByCity.get("NYC"));
}

在分组阶段,我们按城市对人员进行分组,然后执行映射以获取每个人的宠物。

3.分组,转换和归约

前面的示例对于转换对象分组很有用,但是也许我们不想获取每个组的整个列表。 在此示例中,我们仍希望按所有者所在的城市对宠物进行分组,但是这次我们只想获取每个列表中最老的宠物。

来自Collectors的 collectionAndThen方法允许我们对分组结果进行最终转换:

public void groupTransformAndReduce(List<Person> persons) {final Map<String, Pet> olderPetOfEachCity = persons.stream().collect(groupingBy(Person::getCity,collectOlderPet()));System.out.println("The older pet living in New York is: " + olderPetOfEachCity.get("NYC"));
}private Collector<Person, ?, Pet> collectOlderPet() {return collectingAndThen(mapping(Person::getPet,Collectors.maxBy((pet1, pet2) -> Integer.compare(pet1.getAge(), pet2.getAge()))), Optional::get);}

在按城市对人员进行分组之后,在收集并随后将每个城市的列表中的每个人都转换为宠物,然后应用减法来获得列表中年龄最大的宠物。

4。结论

Collectors API不仅允许我们对事物的集合进行分组,而且还可以根据需要进行转换和简化以获得不同的对象。

翻译自: https://www.javacodegeeks.com/2016/03/grouping-transforming-reduction-java-8.html

归约操作java8

归约操作java8_使用Java 8进行分组,转换和归约相关推荐

  1. java 8 集合分组_Java 8:按集合分组

    java 8 集合分组 在继续阅读Venkat Subramaniam的" Java函数式编程 "时,我到达了介绍Stream#collect函数的那部分. 我们想收集一个人,按年 ...

  2. Java 8 - Stream流骚操作解读2_归约操作

    文章目录 Pre 什么是归约操作 元素求和 reduce reduce如何运行的 最大值和最小值 Pre Java 8 - Stream流骚操作解读见到过的终端操作都是返回一个 boolean ( a ...

  3. 使用Java 8进行分组,转换和归约

    1.简介 在上一篇文章中 ,我写了关于如何使用流和分组对对象集合进行分组的文章. 这很有用,但不涵盖特定的用例. 例如,有时我们不仅需要对事物进行分组,还需要将结果转换为更合适的对象. 在这篇文章中, ...

  4. MongoDb数组操作 - unwind解包、group分组统计、sort排序

    MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数 一,问题描述 [使用 unwind 操作符 "解包" Document 里面的Array中的每 ...

  5. Java Lambda 多级分组

    Java Lambda 多级分组 public class Menu {/*** 菜品名称*/private String name;/*** 菜品单价*/private Double price;/ ...

  6. java 实现集合分组功能

    1.代码 package com.xtm.java.test;import java.util.ArrayList; import java.util.Collection; import java. ...

  7. Java stream 处理分组后[升降序key]取每组最大

    Java stream 处理分组后[升降序key]取每组最大 一. 需求 二. 整活 git仓库直达 如何让同事看不懂你写的代码 然后觉得你非常牛逼 这里用到了stream()与Lambda 需要有点 ...

  8. JAVA集合与字符串转换

    JAVA集合与字符串转换 集合与字符串转换 集合与字符串转换 这里面包含的内容麻雀虽小五脏俱全,常用的一些java遍历,JDK1.8新特性实用,任意对象排序分组,字符串切割,集合切割,字符串转集合,集 ...

  9. scala当中的文件操作、网络请求和隐式转换

    scala当中的文件操作.网络请求和隐式转换 文件操作和网络请求 读取文件当中每一行的数据 读取词法单元和数字 读取网络资源.文件写入.控制台操作 读取网络资源 文件写入操作 控制台交互操作 scal ...

最新文章

  1. Python之 sklearn:sklearn.preprocessing中的StandardScaler函数的简介及使用方法之详细攻略
  2. 道理都懂,为什么还是做不好需求分析?
  3. 如何使用Soft-NMS实现目标检测并提升准确率
  4. Hbase学习-一步一步慢慢来
  5. 基于函数计算的 Serverless AI 推理
  6. 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
  7. Scala 多继承问题
  8. MySql索引分析及查询优化
  9. 令人郁闷的DateTime.ToString()方法
  10. (继续搬)struts日期格式的转换以及hibernate中session的关闭在xml中的配置
  11. java8之StringJoiner。终于有像guava类库里的功能了
  12. 安装完office没有图标_很多人不会设置路由器?只因没有弄懂安装顺序,看完你就会了...
  13. Linux版awvs破解详细步骤
  14. 建筑能源管理系统主要有什么功能?
  15. Drools规则引擎快速入门(一)
  16. java裁剪缩放图片代码下载
  17. Vue项目玩转Ueditor(百度富文本编辑器),解决图片需要上传服务器的问题,将图片转存base64字符串。
  18. Mapbox简易入门教程
  19. Macbook pro如何设置触控栏
  20. 简单制作视频画面水平镜像播放特效

热门文章

  1. P2053-修车【网络流,费用流】
  2. GYM101002C - Greetings!
  3. 洛谷-P2801 教主的魔法 分块
  4. equals 和 hashCode 到底有什么联系?一文告诉你
  5. 11 个简练的 Java 性能调优技巧
  6. JAVA面试常考系列十
  7. 内连接,外链接(左连接、右连接、全连接),交叉连接大总结
  8. 为什么byte取值-128~127??
  9. Class类中的getEnclosing*、getDeclared*与getDeclaringClass的区别
  10. ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that