Collectors.maxBy()和 minBy()

Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and reduce 操作,或者统计操作。

Collectors中的maxBy & minBy这两个函数和lambda中的max&min作用相同

maxByAndMinByExample代码

@Test
public void maxByAndMinByExample() {List<String> list = Arrays.asList("1", "2", "3", "4");Optional<String> max = list.stream().collect(Collectors.maxBy((s, v) -> s.compareTo(v)));Optional<String> min = list.stream().collect(Collectors.minBy((s, v) -> s.compareTo(v)));System.out.println(max.get());System.out.println(min.get());
}

maxByAndMinByExample结果

4
1

maxAndMinExample代码

@Test
public void maxAndMinExample() {List<String> list = Arrays.asList("1", "2", "3", "4");Optional<String> max = list.stream().max((s, v) -> s.compareTo(v));Optional<String> min = list.stream().min((s, v) -> s.compareTo(v));System.out.println(max.get());System.out.println(min.get());
}

maxAndMinExample结果

4
1

注意:

  • 经过对比发现,直接使用man|min代码会更简洁、易读

  • 值得一提的是max&min&maxBy & minBy中所需要的表达式【Comparator比较器】

    • 代码中是使用语法糖的形式写的

    • 其中定义的是两个值的比较,也可以自己写比较器进行调用

    • public static <T> Collector<T, ?, Optional<T>> minBy(Comparator<? super T> comparator) {return reducing(BinaryOperator.minBy(comparator));
      }
      
    • 因为可以自定义比较器,所以max&min&maxBy & minBy中的参数是不限制的,不像Joining函数仅限于String

一点唠叨:

  • 相对于Collectors.averagingDouble()来说,方法体只执行一次。
  • 相对于Collectors.averagingDouble()来说,方法体做出了优化
  • 相对于Collectors.averagingDouble()来说,这个没有坑
  • ……
  • 为什么这么提Collectors.averagingDouble(),最好看一下—> averagingDouble
  • 因为Collectors.averagingDouble()有坑,有坑,有坑

Collectors.maxBy()和minBy()相关推荐

  1. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  2. js 中转换成list集合_java stream中Collectors的用法

    简介 在java stream中,我们通常需要将处理后的stream转换成集合类,这个时候就需要用到stream.collect方法.collect方法需要传入一个Collector类型,要实现Col ...

  3. 用流收集数据Collectors的用法介绍分组groupingBy、分区partitioningBy(一)

    文章目录 一.收集器简介 二.归约和汇总 1.查找流中最大值和最小值Collectors.maxBy和,Collectors.minBy 2.汇总 3.连接字符串 4.广义归约汇总 三.分组 1.多级 ...

  4. JDK12的新特性:teeing collectors

    文章目录 简介 talk is cheap, show me the code Teeing方法深度剖析 Characteristics 总结 JDK12的新特性:teeing collectors ...

  5. java stream中Collectors的用法

    文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...

  6. java8 Lambda Stream collect Collectors 常用实例

    将一个对象的集合转化成另一个对象的集合 List<OrderDetail> orderDetailList = orderDetailService.listOrderDetails(); ...

  7. java8 两个list合并_深入介绍和使用 Java 8 的 Collector 接口和 Collectors 工具类

    1 概述 java.util.stream.Collector: Collector 接口用于将 Stream 流中的数据加工,转换,处理,最后返回结果. java.util.stream.Colle ...

  8. collectors 求和_Java-Collectors常用的20个方法

    相思相见知何日?此时此夜难为情. pexels-pixabay-267350.jpg 返回List集合: toList() 用于将元素累积到List集合中.它将创建一个新List集合(不会更改当前集合 ...

  9. Collectors

    Collectors它是个工具类,提供了很多静态方法来返回Collector.通常作为Stream.collect()方法的入参,来实现更多的功能. API分类 求平均值 static <T&g ...

  10. java流式编程(七)Collectors中的常用方法

    目录 前言 一.创建实体类 二.测试数据 二.测试方法 1.toCollection(collectionFactory) 2.toList() 3.toSet() 4.toMap(keyMapper ...

最新文章

  1. ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)
  2. pgsql 相关的命令
  3. Centos 升级MySQL版本或者Yum安装Mysql5.6
  4. Virtual DOM的简单实现
  5. C++双目/单目运算符的重载
  6. linux中统计java数量,linux 统计当前目录下文件数
  7. php:修改目录下文档权限(777,644 )
  8. hpux11.31 环境下如何查看磁盘的WWID( scsimgr lun_map)
  9. JavaScript中的两个等号(==)和三个等号(===)
  10. thinkcmf5调用指定分类的二级_python机器学习API介绍11: 伯努利贝叶斯分类器
  11. 【离散数学】集合论 第三章 集合与关系(6) 二元关系的定义、表示和运算及性质
  12. ps制作哈7海报字体
  13. 下载视频 用IDM下载的视频花屏
  14. 伴风网易博客linux,伙伴 - 成凹的日志 - 网易博客
  15. php网站访问卡顿,网站反应慢,经常卡顿是什么原因?怎么解决?
  16. 用python画出逻辑斯蒂映射(logistic map)中的分叉图
  17. 协作:一份来自RChain的倡议书(上篇)
  18. 1.余弦定理、两角和公式公式复习
  19. 百度云重置服务器密码,单台或多台腾讯云服务器 CVM 重置实例密码教程
  20. M1 mac外接显示器休眠后又失败

热门文章

  1. 服务器tomcat/mysql的一些有关命令
  2. 移动 web 1px 边框解决方案
  3. Deep Learning Tutorial - Multilayer perceptron
  4. Python 操作 mongodb 数据库
  5. Python 多线程7-线程通信
  6. MySQL学习笔记——第1章 数据库和MySQL
  7. javascript 多线程异步队列
  8. app_offline.htm的作用
  9. [windpole]SharePoint异常:应用程序试图执行不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别。...
  10. hive對於數據是懶加載的_05-配置数据库的远程连接 创建hive数据库的时候要选择latin1...