man*_*eet 4 java functional-programming min java-8 flatmap
我希望从java中的地图列表中获取最小值.我使用flatmap,stream和min的组合来做到这一点并没有得到预期的结果.这是代码公共类TestMin {
public static class TestHolder{
public static Map<String,Integer> getValues(){
Map<String,Integer> map = new HashMap<>();
map.put("a",1);
map.put("b",3);
map.put("c",2);
return map;
}
}
public static void main(String[] args) {
List<Map<String, Integer>> l = new ArrayList<>();
l.add(TestHolder.getValues());
l.add(TestHolder.getValues());
l.add(TestHolder.getValues());
// Getting min
int min = l.stream().map((m)->m.values()).flatMap((v)->v.stream()).min(Integer::min).get();
System.out.println(min);
}
}
Run Code Online (Sandbox Code Playgroud)
输出为:2
当然,我期望的输出是1.尝试一些调试表明它提供的输出值对应于"c".即如果地图看起来像
[a->2 , b->3, c->1]
Run Code Online (Sandbox Code Playgroud)
然后我得到的输出是1.问题是为什么它不是按值排序而是按键排序并为我提供意外的输出.
Stream::min期待符合Comparator合同的东西.但是Integer::min不这样做,它只返回其两个输入的最小值.你应该使用Integer::compare而不是.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |