遍历HashMap并将值放入列表

时间:2019-07-14 17:35:07

标签: java

我有一个HashMap,其中包含各种“产品”作为键和“产品组ID”作为值。 我需要分离出具有相同组ID的产品,并将它们放入新的ArrayList(仅包含产品,即键)中。 我对如何做到这一点感到困惑,任何帮助将不胜感激!

类似这样的事情: HashMap:(1,a)(2,b)(3,c)(4,a)(5,b) 新的ArrayList应该包含:{1,4}-此列表被发送到另一个函数进行处理。 同样,应将2,5存储在另一个列表中并进行处理。 最后,应该将3存储在数组列表中并进行处理。

3 个答案:

答案 0 :(得分:2)

您可以使用的另一种方法是在HashMap中添加另一个ArrayLists,然后为其添加值。您可以尝试以下代码:

我假设Product是一个字符串,并且ID是一个整数,但是您可以更改它。

Map < Integer, String > sourceMap = Map.of ( 1 , "a" , 2 , "b" , 3 , "c" , 4 , "a " , 5 , "b" );

HashMap <String, ArrayList<Integer>> result = new HashMap<>();
for (Map.Entry <Integer, String> entry : sourceMap.entrySet()) {
    String value = entry.getValue();
    int key = entry.getKey();

    if (result.containsKey(value)) {
        ArrayList<Integer>temp = result.get(value);
        temp.add(key);
    } else {
        ArrayList<Integer> temp = new ArrayList<>();
        temp.add(key);
        result.put(value, temp);
    }
}
System.out.println ("result.toString():\n" + result);

现在,您有一个名为HashMap的{​​{1}},其中包含您想要的result。您可以遍历以获取每个ArrayList

答案 1 :(得分:1)

我建议使用以下模式。

假设您有一个简单的HashMap<String, String>。然后,您可以执行以下操作:

Map<String, List<String>> result = map.entrySet().stream().collect(
   Collectors.groupingBy(e -> e.getValue(), 
   Collectors.mapping(e -> e.getKey(), Collectors.toList()))
)

结果是:{a=[1, 4], b=[2, 5], c=[3]}

result.get("a")可以简单地访问列表,依此类推。

答案 2 :(得分:0)

我认为您需要这样的东西:

private static Map<Product, Long> map = new HashMap<>();

public static void main(String[] args) {
    fillTestData();
    List<Product> products = findProductByGroup(1L);
    System.out.println(products.size());
}

private static List<Product> findProductByGroup(Long groupId){
    return map.entrySet().stream()
        .filter(entry -> entry.getValue() == groupId)
        .map(Entry::getKey)
        .collect(Collectors.toList());
}

private static void fillTestData() {
    String product = "product";
    long groupId = 0;
    for(int i = 0; i < 100; i++) {
        if(i % 2 == 0) {
            groupId = 1;
        }else {
            groupId = 2;
        }
        map.put(new Product(product+i), groupId);
    }
}

否则,您已经明确声明了您的需求