繁体   English   中英

计算元素数组的 MIN、MAX 的程序,其中每个元素都是 Map<String,Float>

[英]Program to calculate MIN, MAX of array of elements where each element is of Map<String,Float>

我有一个元素数组,其中每个元素都是 Map 类型

elements = [{"a":10,"b":12,"c":13,"d":14},{"a":2,"b":1,"c":5,"d":19},{"a":5,"b":4,"c":13,"d":4},{"a":140,"b":1,"c":4,"d":14}]

我想找到地图键的最小最大值。

[{a "min": 2, "max": 140},{b "min": 1, "max": 5},{c "min": 4, "max": 13},{d "min": 4, "max": 19}]

我的方法是

    public class TestMap {

    public static void main(String[] args) {

ArrayList<Map<String, Float>> elements = new ArrayList<Map<String, Float>>();
System.out.println("Initial Mappings are: " + elements);

ArrayList<Float> A = new ArrayList<Float>();
ArrayList<Float> B = new ArrayList<Float>();
ArrayList<Float> C = new ArrayList<Float>();
ArrayList<Float> D = new ArrayList<Float>();

for (int i = 0; i < 3; i++) {

Map<String, Float> elem = (Map<String, Float>) elements.get(i);

A.add(elem.get("a"));
B.add(elem.get("b"));
C.add(elem.get("c"));
D.add(elem.get("d"));
}     

我有书面函数来查找 Min 和 Max 并调用该函数

 System.out.println("A ->" + "Min: " + findMin(A) + " Max: " + findMax(A));
   System.out.println("B ->" + "Min: " + findMin(B) + " Max: " + findMax(B));
   System.out.println("C ->" + "Min: " + findMin(C) + " Max: " + findMax(C));
   System.out.println("D ->" + "Min: " + findMin(D) + " Max: " + findMax(D));

}

有没有更好的方法来做到这一点,这是有效的。

您提供的代码存在一些问题,运行失败,但我想我明白了您的意思。 请参阅下面示例代码中每个键的最小值/最大值示例。

ArrayList<Map<String, Float>> elements = new ArrayList<>();
elements.add(Map.of("a", (float) 10, "b", (float) 11));
elements.add(Map.of("a", (float) 12, "b", (float) 13));
elements.add(Map.of("a", (float) 14, "b", (float) 15));
System.out.println("Initial Mappings are: " + elements);

Map<String, Float> min = elements.stream().reduce((e1, e2) ->
        e1.keySet().stream()
                .map(k -> Map.of(k, Math.min(e1.get(k), e2.get(k))))
                .collect(HashMap::new, Map::putAll, Map::putAll)
).get();
Map<String, Float> max = elements.stream().reduce((e1, e2) ->
        e1.keySet().stream()
                .map(k -> Map.of(k, Math.max(e1.get(k), e2.get(k))))
                .collect(HashMap::new, Map::putAll, Map::putAll)
).get();
System.out.println(min);
System.out.println(max);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM