2015-08-19 37 views
0

我正在使用Map<User, Integer>,我需要選擇具有特定整數的用戶並將它們添加到ArrayList,那麼讓所有用戶進入ArrayList<User>的Integer = 1的最簡單方法是什麼?Convert Map to ArrayList where entry value = something

這是我試過的,它的工作原理,但我會感激更短的代碼。

ArrayList<User> users = new ArrayList(); 

for (Map.Entry<User, Integer> entry : userAnswers.entrySet()) 
{ 
    if(entry.getValue()==1) users.add(entry.getKey()); 
} 

編輯:謝謝你達尼爾Gaponov,你的回答正是我一直在尋找!

+0

有很多方法可以做到這一點。選擇最好的一個需要更多關於你的背景和限制的解釋。 – dotvav

+2

等等,很多人都在輸入他們的答案。順便說一句,你嘗試過什麼嗎? –

+0

什麼意思是最好的方法? – Jens

回答

6

需要Java 8:

map.entrySet().stream() 
    .filter(e -> e.getValue().equals(1)) 
    .map(e -> e.getKey()) 
    .collect(Collectors.toList()); 
+1

只是想提出相同的,但也許你可以添加一些解釋,尤其是,必需的Java版本... –

+0

@tobias_k完成! –

+1

謝謝你,我會提高你的帖子至少10倍提供一個簡單的線做到這一點,而不是問我已經嘗試過什麼,以及什麼意味着最好的方式... – Ladas125

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); 
1

我不認爲有一個更簡單的方法來做到這一點。使用for循環,如果和Java一樣簡單。

你爲什麼認爲應該有一個更簡單的方法?也許你沒有做什麼,我認爲當你說:

與若整數== 1,添加到ArrayList

如果你發佈你做了什麼,我們可以看到,如果有一個更簡單的方法。

1

如果您正在尋找簡單代碼,那麼您也可以使用proton pack實用程序Java 8與這條簡單的線。

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