我已经写了下面的内容 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循环,直接获得最大值。我在找一些类似c的东西 std::max()
. 我在这里搜索找到了这个(convert std::max to java),但是我不知道如何转换我的 Iterator<IntWritable>
至 Collections
.
我是一个java初学者,但精通c,所以我也在努力学习java中使用的各种技术。
1条答案
按热度按时间nwnhqdif1#
不幸的是,没有办法将
Iterator
进入Collections
,除非您使用其他库,如guava或apache commons collections。以第二个为例,您可以将其转换为List
然后打电话给Collection.max
功能。如果不想使用外部库,则没有其他选择。您可以使用for each循环稍微减少一点代码,尽管结果没有那么不同: