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

标签 java collections

我有一个元素数组,其中每个元素都是 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/

相关文章:

java - 找不到符号...为什么?

java - Xpath 在 XMLSpy 中显示正确的结果,但在 Java 中显示 null

java - java集合接口(interface)中的继承

ruby-on-rails - Ruby Rails 集合选择显示空白 "prompt"值?

Excel VBA 将项目添加到动态创建的组合框

java - 消费者线程等待多个队列

java - 是否可以使用仅在使用此枚举时定义的变量创建枚举?

java - 组织.hibernate.HibernateException : merge is not valid without active transaction

java - 在 Spring-Hibernate 项目中初始化实体集合 (POJO) 的正确方法是什么?

java - 如何在抽象类型的 java 中初始化 List,以便以后可以将子类型添加到列表中