我有以下类型的 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/