我有一个元素数组,其中每个元素都是 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}]
我想找到 map 键的最小值和最大值。
[{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"));
}
我有编写的函数来查找最小值和最大值并在函数中调用
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);
关于java - 计算元素数组的 MIN、MAX 的程序,其中每个元素都是 Map<String,Float>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59403076/