Java 8 Stream API:如何在Map中处理空值

时间:2019-12-24 04:02:09

标签: java dictionary filter java-stream

我有一个Map类型的arraylist。我想从列表中筛选出空值并找到最大值和最小值。该程序运行正常,除了空值。

ArrayList<Map<String, Float>> elements = new ArrayList<Map<String, Float>>();
Map<String, Float> element = new HashMap<String, Float>();
element.put("a", (float) 1.22);
element.put("b", (float) 1.33);
element.put("c", (float) 1.52);
element.put("d", (float) 1.452);
element.put("e", (float) 1.452);

Map<String, Float> element2 = new HashMap<String, Float>();
element2.put("a", (float) 1.2332);
element2.put("b", (float) 1.242);
element2.put("c", (float) 1.552);
element2.put("d", (float) 15.33);
element2.put("e",null);

elements.add(element);
elements.add(element1);
elements.add(element2);

System.out.println("Initial Mappings are: " + elements);
Map<String, Float> min = elements.stream() 
            .flatMap(m -> m.entrySet().stream())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Math::min));

System.out.println(min);

2 个答案:

答案 0 :(得分:4)

在链中添加过滤器。

Map<String, Float> min = elements.stream()
            .flatMap(m -> m.entrySet().stream())
            .filter(entry -> entry.getValue() != null)
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Math::min));

答案 1 :(得分:2)

您可以使用parent过滤空值,并使用Collectors.summarizingDouble获取child'schildfilter

min