中的最大元素-6ren"> 中的最大元素-我在下面写了reduce()确定给定年份的最高记录温度的方法。 (map() 的输出给出了一年中记录的温度列表。) public void reduce(IntWritable year -6ren">
gpt4 book ai didi

java - "Shortcut"在reduce()方法中确定Iterator中的最大元素

转载 作者:可可西里 更新时间:2023-11-01 17:00:18 28 4
gpt4 key购买 nike

我在下面写了reduce()确定给定年份的最高记录温度的方法。 (map() 的输出给出了一年中记录的温度列表。)

public void reduce(IntWritable year
, Iterator<IntWritable> temps
, OutputCollector<IntWritable, IntWritable> output
, Reporter reporter)
throws IOException {
int maxValue = Integer.MIN_VALUE;
while(temps.hasNext()) {
int next = temps.next().get();
if(next > maxValue) {
maxValue = next;
}
}

output.collect(year, new IntWritable(maxValue));
}

我很好奇有没有什么“捷径”,比如预定义的方法,可以省去while循环,直接取最大值。我正在寻找类似于 的东西的 std::max() .我通过在这里搜索找到了这个 ( Convert std::max to Java ),但我不知道如何转换我的 Iterator<IntWritable>Collections .

我是Java的初学者,但精通C++,所以我也在努力学习Java中使用的各种技术。

最佳答案

不幸的是,没有办法将 Iterator 转换为 Collections,除非您使用另一个库,例如 GuavaApache Commons Collections .以第二个为例,您可以将其转换为 List,然后调用 Collection.max 函数。

List<IntWritable> list = IteratorUtils.toList(temps);   

如果您不想使用外部库,则没有其他选择。您可以使用 for each 循环减少一些代码,但结果并没有什么不同:

for(IntWritable intWritable : temps) {
if(intWritable.get() > maxValue) {
maxValue = intWritable;
}
}

关于java - "Shortcut"在reduce()方法中确定Iterator<IntWritable>中的最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25080207/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com