我想写一个函数,需要一个地图,并返回一个条目。如果具有最大整数值的条目是唯一的,它应该返回该条目。但是,如果有重复的条目具有相同的最大值,则应该返回一个带有“MULTIPLE”键且值为0的新条目。容易获得忽略重复的最大值:Java流:获取最大,如果没有重复
public static Entry<String,Integer> getMax(Map<String,Integer> map1) {
return map1.entrySet().stream()
.max((a,b) -> a.getValue().compareTo(b.getValue()))
.get();
}
但为了让我按照我刚才所说的去做,我只能找到一个解决方案,我必须创建一个初始流来做布尔检查,如果有多个最大值,然后做另一个流,如果没有得到值。我想找到一个解决方案,我可以只用一个流来完成这两项任务。
这是我的小测试的情况:
@Test
public void test1() {
Map<String,Integer> map1 = new HashMap<>();
map1.put("A", 100);
map1.put("B", 100);
map1.put("C", 100);
map1.put("D", 105);
Assert.assertEquals("D", getMax(map1).getKey());
Map<String,Integer> map2 = new HashMap<>();
map2.put("A", 100);
map2.put("B", 105);
map2.put("C", 100);
map2.put("D", 105);
Assert.assertEquals("MULTIPLE", getMax(map2).getKey());
究竟是两个流的问题?为什么你需要把它归结为一个? –
没有问题。我只想知道这是否可能,如果是的话,如何去做。 – wlaem