java - 在 HashMap 中搜索值

标签 java arraylist hashmap

我有以下类型的 HashMap:HashMap<LocalDate, ArrayList<String>>其中包含以下值:

2015-12-26=[John, J.Fox , Barry]
2015-12-24=[Barry, Michael, Martin],
2015-12-20=[McAllister, Barry, Clark]
..............

现在,如果我想搜索 "Barry"HashMap并获取最新的 key (在本例中为 12 月 26 日),我将如何去做?

.values()方法似乎不起作用,因为每个键都有一个 ArrayList而不仅仅是一个元素。

最佳答案

在 java 8 中你可以使用这样的东西:

Optional<Map.Entry<LocalDate, List<String>>> first = map
            .entrySet()
            .stream()
            .filter(entry -> entry.getValue().contains("Barry"))
            .sorted(Map.Entry.comparingByKey())
            .findFirst();

这会从 map 中获取所有条目,根据值过滤它们,根据键对它们进行排序并获取第一个(如果有)。然后,您可以使用 first.ifPresent() 方法对第一个条目执行任何操作,这里我只是将它们打印到控制台:

first.ifPresent(entry -> {
            System.out.println(entry);
        });

也许这不是最有效的算法,但它确实有效

更新 1: 要将日期从最晚到最早排序,请使用以下命令:

sorted(Map.Entry.<LocalDate, List<String>>comparingByKey().reversed())

更新 2: 正如 Andreas 所说,您可以使用 max 代替具有更好渐近行为的 sorted。实际上,由于您只想要最新的项目,因此无需对条目进行排序即可获得它:

Optional<Map.Entry<LocalDate, List<String>>> found = map
                .entrySet()
                .stream()
                .filter(entry -> entry.getValue().contains("Barry"))
                .max(Map.Entry.comparingByKey());

关于java - 在 HashMap 中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474358/

相关文章:

Java OpenGL 将片段着色器应用于部分透明纹理映射四边形

java - Arraylist 在不应该的时候得到排序?

java - Java检查ArrayList中是否存在Object

java - 如何打印一次for循环HashMap结果?

Java:如何使用 nio Path 规范化路径?

java - 为什么 LocalBroadCastManager 从 IntentService 发送的 Intent 没有被 Activity 类中的 BroadCastReceiver 接收到?

java - 根据对象参数值对 toString 中的对象进行排序

java - 我如何在 Java 中存储这些数据?

java - 按值快速查找键而不创建反向 HashMap ?

java - 如果我有ArrayList,如何比较两个HashMap?