我想使用java 8流方法从列表中获取最大值。
结构如下:
Round
。Round
对象都存储在一个ArrayList
名为arrRound
Round
对象都有一个字段:List<Hit> hits
a Hit
包含2个字段:int numberOfGames
和int prizeAmount
public class Round{
private List
}
public class Hits{
private int numberOfGames;
private int prizeAmount;
}
我想做的是迭代的所有元素arrRound
,获取hits字段的getPrizeAmount()
方法,并从中获取最大价值。我从以下步骤开始,但似乎无法做到:
public class Main(){
public void main(String[]args){
List<Round> arrRound = getRoundFromCSV();
int maxPrize = arrRound.stream()
.forEach(round -> {
round.getHits()
.forEach(hit -> hit.getPrizeAmount());
});
}
}
而且我无法在语句末尾调用max()。
提前谢谢你的帮助!
您可以通过以下方式实现它:
Round
的list
Round
对象更改为List<Hit> hits
,flatMap
从去Stream<List<Hits>>
到Stream<Hits>
Hits
到其prizeAmount
领域max
如果存在-1
所以使用 Method reference
int maxPrize = arrRoundarrRound.stream() // Stream<Round>
.map(Round::getHits) // Stream<List<Hits>>
.flatMap(List::stream) // Stream<Hits>
.mapToInt(Hit::getPrizeAmount) // IntStream
.max() // OptionalInt
.orElse(-1); // int
带班lambda
和map + flatMap
一个:
int maxPrize = arrRoundarrRound.stream()
.flatMap(round -> round.getHits().stream())
.mapToInt(hits -> hits.getPrizeAmount())
.max()
.orElse(-1);
我想用Java8lambda表达式在java列表中找到max值,所以,我有一个类叫TicketMaster,项表是TicketMasterLog,在TicketMasterLog类中我有StatusMaster类的statusId引用列,所以这里我想在TicketMasterLog列表中找到max statusId,下面我给出我的代码请参考 而TicketMasterItem表是 因此,在列表中,
问题内容: 是否有一种简洁的方法可以一次性提取流的最小值和最大值(基于某个比较器)? 似乎有很多方法可以分别获取最小值和最大值,或者我可以将流分类为一个临时对象,例如: 但这并不简洁,需要分配一个临时对象。我宁愿不分配一个临时对象,也不希望两次通过流。有其他选择吗? 问题答案: 如果这是经常需要的功能,我们最好做一个。我们将需要一个类来保存,并需要使用工厂方法来创建统计收集器。 (也许更好的便捷方
是否有一种简洁的方法可以在一次过程中提取流的最小值和最大值(基于某个比较器)? 似乎有很多方法可以单独获取最小值和最大值,或者我可以将流排序为临时对象,例如: 但这并不简洁,需要分配一个临时对象。我宁愿不要分配一个临时对象,也不要在流中进行两次传递。有其他选择吗?
如何将键字符串格式化为,只有周、月和年作为流的输出? 数据集: 这可能不是初始化和格式化的正确方式,因此请注意。这只是地图中实际数据的一小部分。 预期产出: 以下是打印地图时的预期输出:[年/月/年的周数=分组周值中的最高值]
我有一个hashmap,看起来像这样: 我的ImageRecipeMap对象如下所示: 我想获取所有ImageID列表,并使用Java8流创建一个总的ImageID列表。到目前为止,这就是我所拥有的,但我的collect上似乎有一个编译错误: