如何在java中从POJO中的ArrayList中获取特定的值。

问题描述 投票:0回答:1
Key : 22 Value: Abey
Key : 22 Value : Dawn
Key : 22 Value : Sherry
Key : 22 Value : Sherry
Key : 22 Value : Sherry

我想只打印Sherry的Keys,如何用Java做?

因为HashMap不存储重复的Keys,所以改变了问题的标题。

java arrays pojo rest-assured
1个回答
1
投票

HashMap不接受重复的键。只接受重复的值。在你的方法中,你不可能像你所显示的那样能够存储所有的记录,例如:当你打印HashMap的输出时,你不可能打印所有的记录。

Map<Integer, String> map = new HashMap<>();
map.put(22, "Abey");
map.put(22, "Dawn");
map.put(22, "Sherry");
map.put(22, "Sherry");
map.put(22, "Sherry");

例如: 当你打印HashMap的输出时, 你只能得到一个输出,因为同一个键会被替换成最新的值。

例如:当你打印HashMap的输出时,你只能得到一个输出,因为同一个键会被替换成最新的值。

{22=Sherry}

如果你真的想存储重复的键,请学习更多关于如何在HashMap中存储重复的键。


1
投票

你可以使用下面这个JDK1.8及以上版本的方法来完成这个任务。

List<Integer> keys = hashMap.entrySet().stream()
            .filter((entry) -> entry.getValue().equals("Sherry"))
            .map(entry -> entry.getKey())
            .collect(Collectors.toList());

0
投票

我认为你需要在地图中循环。没有特定的函数来完成这个任务

map.forEach((k,val) -> {
  if (val.equals("Sherry") {
    keys.add(k);
  }
});

其中map是HashMap,keys是一个列表。


0
投票

你可以使用下面的代码。

static < K, V > List < K > getAllKeysForValue(Map < K, V > mapOfWords, V value) {
    List < K > listOfKeys = null;
    //Check if Map contains the given value
    if (mapOfWords.containsValue(value)) {
        // Create an Empty List
        listOfKeys = new ArrayList < > ();
        // Iterate over each entry of map using entrySet
        for (Map.Entry < K, V > entry: mapOfWords.entrySet()) {
            // Check if value matches with given value
            if (entry.getValue().equals(value)) {
                // Store the key from entry to the list
                listOfKeys.add(entry.getKey());
            }
        }
    }
    // Return the list of keys whose value matches with given value.
    return listOfKeys;
}

0
投票

也许你可以使用反向地图,将Sherry、Dawn和Abey作为键,22作为列表的值。你可以有这样的东西。

Map<String , Set<String> > reverseMap;

现在你可以存储 诸如22号键 中,并以该地图的密钥作为名称。

© www.soinside.com 2019 - 2024. All rights reserved.