Collectors.maxBy()和minBy()

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()有坑,有坑,有坑
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Collectors.maxBy是Java 8中Stream API中的一个方法,它用于获取集合中具有最大值的元素。这个方法接受一个Comparator参数,用于定义元素之间的比较规则。它返回一个Optional对象,如果集合为空,则返回一个空的Optional对象,如果集合非空,则返回包含最大值元素的Optional对象。 在使用Collectors.maxBy方法时,我们可以通过Lambda表达式或者自定义的Comparator对象来指定元素之间的比较方式。这个方法可以应用于任何实现了Comparable接口的对象,也可以使用自定义的Comparator进行比较。 下面是一个示例代码: ```java List<String> list = Arrays.asList("1", "2", "3", "4"); Optional<String> max = list.stream().collect(Collectors.maxBy((s1, s2) -> s1.compareTo(s2))); System.out.println(max.get()); ``` 这段代码中,我们使用了一个Lambda表达式来比较字符串元素的大小,并使用Collectors.maxBy方法获取最大值元素的Optional对象。最后,我们通过调用Optional对象的get方法来获取最大值元素并打印出来。在这个示例中,最大值为"4"。 需要注意的是,如果集合为空,调用Optional对象的get方法将会抛出NoSuchElementException异常,因此在使用maxBy方法时需要确保集合非空。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Collectors.maxBy()和minBy()](https://blog.csdn.net/L_fly_J/article/details/120097476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Java Stream CollectorsmaxBy() minBy()、groupingBy()、partitioningBy()的使用](https://blog.csdn.net/m0_60105488/article/details/125451940)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值