查找键的最大值

阿列克雅
public class Task1 {

    public static void main(String[] args) {

        Map<String, List<String>> map = new HashMap<String, List<String>>();

        List<String> valSetOne = new ArrayList<String>();
        valSetOne.add("0.00");
        valSetOne.add("0.01");
        valSetOne.add("1.00");

        List<String> valSetTwo = new ArrayList<String>();
        valSetTwo.add("0.00");
        valSetTwo.add("0.01");

        List<String> valSetThree = new ArrayList<String>();
        valSetThree.add("0.01");
        valSetThree.add("1.00");

        List<String> valSetFour = new ArrayList<String>();
        valSetFour.add("0.01");

        map.put("HR3-A1234", valSetOne);
        map.put("HR3-A2345", valSetTwo);
        map.put("HR3-A3456", valSetThree);
        map.put("HR3-A4567", valSetFour);

        for (Map.Entry<String, List<String>> entry : map.entrySet()) {

            String key = entry.getKey();

            List<String> values = entry.getValue();

            Object obj = Collections.max(values);
            System.out.println("Value of " + key + " is " + obj);

        }

    }
}

这是我的代码,它工作得很好。对于键 HR3-A2345,我想找到最小值,而对于其他记录,我需要最大值。有人可以建议我一个解决方案吗?

奥列格切瑞德尼克

如果您不想使用if...else,那么我建议先对集合进行排序,然后再将其放入地图以首先放置所需元素。例如:

final BiFunction<List<String>, Comparator<String>, List<String>> sort = (values, comparator) -> {
    values.sort(comparator);
    return values;
};

Map<String, List<String>> map = new HashMap<>();
map.put("HR3-A1234", sort.apply(valSetOne(), null)); // first element is min
map.put("HR3-A2345", sort.apply(valSetTwo(), Collections.reverseOrder()));  // first element is max
map.put("HR3-A3456", sort.apply(valSetThree(), null)); // first element is min
map.put("HR3-A4567", sort.apply(valSetFour(), null)); // first element is min

map.forEach((key, values) ->
        System.out.println("Value of " + key + " is " + (values != null && !values.isEmpty() ? values.iterator().next() : null)));

笔记:

  1. 我可以看到,您想比较双精度值,但在您的示例中,您比较了Strings! 这是不一样的。在这种情况下,必须更换StringDouble您的代码。
  2. 如果值无法复制,那么List您可以使用TreeSet所需的比较器而不是使用

例如;

public static void main(String... args) {
    Map<String, Set<Double>> map = new HashMap<>();
    map.put("HR3-A1234", valSetOne(null)); // first element is min
    map.put("HR3-A2345", valSetTwo(Collections.reverseOrder()));  // first element is max
    map.put("HR3-A3456", valSetThree(null)); // first element is min
    map.put("HR3-A4567", valSetFour(null)); // first element is min

    map.forEach((key, values) -> {
        if (values != null && !values.isEmpty())
            System.out.format("Value of %s is %.2f\n", key, values.iterator().next());
    });
}

private static Set<Double> valSetOne(Comparator<Double> comparator) {
    Set<Double> values = new TreeSet<>(comparator);
    values.add(.0);
    values.add(.01);
    values.add(1.);
    return values;
}

private static Set<Double> valSetTwo(Comparator<Double> comparator) {
    Set<Double> values = new TreeSet<>(comparator);
    values.add(.0);
    values.add(.01);
    return values;
}

private static Set<Double> valSetThree(Comparator<Double> comparator) {
    Set<Double> values = new TreeSet<>(comparator);
    values.add(.01);
    values.add(1.);
    return values;
}

private static Set<Double> valSetFour(Comparator<Double> comparator) {
    Set<Double> values = new TreeSet<>(comparator);
    values.add(.01);
    return values;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找哈希值的键的最大值

来自分类Dev

在哈希图中查找与最大值对应的键

来自分类Dev

在键值对的 PCollection 中查找具有最大值的键

来自分类Dev

PHP-查找最大值/最大值

来自分类Dev

使用半已知键在ArrayList的HashMap中查找最大值和最小值-Java

来自分类Dev

使用半已知键在ArrayList的HashMap中查找最大值和最小值-Java

来自分类Dev

查找连续相似值的最大值

来自分类Dev

Excel查找值旁边的最大值

来自分类Dev

如何使用Java 8在List <TreeMap <Integer,Integer >>中查找特定键的最大值

来自分类Dev

如何使用Java 8在List <TreeMap <Integer,Integer >>中查找特定键的最大值

来自分类Dev

Java 8查找最大值

来自分类Dev

查找列表的最大值(Python)

来自分类Dev

MongoDB查找并全部返回最大值

来自分类Dev

通过分组查找最大值

来自分类Dev

在C中查找char的最大值

来自分类Dev

用列表递归查找最大值

来自分类Dev

Spark Scala DataFrame查找最大值

来自分类Dev

查找10个线程的最大值

来自分类Dev

在CUDA中查找矩阵的最大值

来自分类Dev

查找自然联接表的最大值

来自分类Dev

查找最大值,除0外

来自分类Dev

在嵌套列表中查找最大值

来自分类Dev

在列表中查找最大值

来自分类Dev

用optim()查找方程的最大值

来自分类Dev

在行中查找最大值

来自分类Dev

动态连接列以查找最大值

来自分类Dev

在熊猫列中查找最大值

来自分类Dev

sql查询性能:查找最大值

来自分类Dev

查找文件中的最大值