使用半已知密钥 – Java查找ArrayLists的HashMap中的最大值和最小值

我有一个ArrayLists的HashMap如下:

HashMap<String, ArrayList<Double>> Flkn = new HashMap<String, ArrayList<Double>>();
Flkn.put("T_"+l+"_"+k+"_"+n, new ArrayList());

l,k和n基于几个循环获取它们的值,因此它们的值根据参数而变化.

在这种情况下,我想知道给定的k值,如何在相关的ArrayLists中找到元素的最小值和最大值. (请注意,长度或ArrayLists也取决于参数)

例如,假设我想知道ArrayList中k = 3的最小值和最大值.那么我正在寻找的是所有具有密钥(“T_”l“_”3“_”n)的ArrayLists,用于l和n的每个值.这里的问题是我无法预测l和n的值,因为它们完全依赖于代码.另一个不方便的事情是我想从l和n得到它们的值的循环中得到最小值和最大值,因此直接使用这些变量是不可行的.

什么是让Java调用l和n的每个值并获取ArrayList中的值以便找到这些值的最小值和最大值的有效方法?

最佳答案
在Java 8中,您可以使用DoubleSummaryStatistics并执行以下操作:

final DoubleSummaryStatistics stats =
  Flkn.entrySet().stream().filter(e -> e.getKey().matches("T_[0-9]+_" + k + "_[0-9]+"))
                          .flatMapToDouble(e -> e.getValue().stream().mapToDouble(Double::doubleValue))
                          .summaryStatistics();
System.out.println(stats.getMax());
System.out.println(stats.getMin());

过滤以仅保留您需要的条目; flatMapToDouble合并你的列表;和summaryStatistics来获得最小值和最大值.

转载注明原文:使用半已知密钥 – Java查找ArrayLists的HashMap中的最大值和最小值 - 代码日志