栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

流-按属性和最大值收集

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

流-按属性和最大值收集

List
当您可以首先收集最大元素时,请勿收集到中,而只是提取一个值,例如

Map<String,Match> result =    Stream.of(new Match("A", 1), new Match("A", 2), new Match("A", 4), new Match("A", 10),   new Match("B", 3), new Match("B", 6), new Match("B", 12), new Match("C", 1))        .collect(Collectors.groupingBy(Match::getType, Collectors.collectingAndThen( Collectors.reducing(BinaryOperator.maxBy(   Comparator.comparingInt(Match::getScore))), Optional::get)));

但是,每当您需要

Optional
在的上下文中提取时
groupingBy
,都值得检查是否具有合并功能的toMap`是否可以给出更简单的结果:

Map<String,Match> result =    Stream.of(new Match("A", 1), new Match("A", 2), new Match("A", 4), new Match("A", 10),   new Match("B", 3), new Match("B", 6), new Match("B", 12), new Match("C", 1))        .collect(Collectors.toMap(Match::getType, Function.identity(),      BinaryOperator.maxBy(Comparator.comparingInt(Match::getScore))));

一旦有了,

Map
您可以通过以下方式产生所需的输出

result.values().forEach(m -> System.out.println(m.getType() + ": " + m.getScore()));

但是,如果您不需要实际的

Match
实例,则可以做得更简单:

Stream.of(new Match("A", 1), new Match("A", 2), new Match("A", 4), new Match("A", 10),          new Match("B", 3), new Match("B", 6), new Match("B", 12), new Match("C", 1))    .collect(Collectors.toMap(Match::getType, Match::getScore, Math::max))    .forEach((type,score) -> System.out.println(type + ": " + score));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号