1
我在Java中的以下容器,我需要在的Java 8流API過濾映射條目
Map<String, List<Entry<Parameter, String>>>
在哪裏工作Parameter
是定義枚舉類型如下:
public enum Parameter {
Param1,
Param2,
Param3
}
的下面的代碼顯示了我如何初始化映射結構 - 有效地將2行放入容器中。
Map<String, List<Entry<Parameter, String>>> map2 = new HashMap<String, List<Entry<Parameter, String>>>() {{
put("SERVICE1", new ArrayList<Entry<Parameter, String>>(){{
add (new AbstractMap.SimpleEntry<>(Parameter.Param1,"val1"));
add (new AbstractMap.SimpleEntry<>(Parameter.Param2,"val2"));
add (new AbstractMap.SimpleEntry<>(Parameter.Param3,"val3"));
}});
put("SERVICE2", new ArrayList<Entry<Parameter, String>>(){{
add (new AbstractMap.SimpleEntry<>(Parameter.Param1,"val4"));
add (new AbstractMap.SimpleEntry<>(Parameter.Param2,"val5"));
add (new AbstractMap.SimpleEntry<>(Parameter.Param3,"val6"));
}});
}};
我需要使用java 8流API來找到「SERVICE1
」的val1
和val2
值,但我不知道正確的Java流過濾器和映射語法。
我能拿出最近的事情是下面的,但在頂級這隻過濾器,它返回一個列表的列表,而不是Parameter.Param1,"val1"
& Parameter.Param2,"val3"
,我正在尋找從SERVICE1
排列表。
List<List<Entry<Parameter, String>>> listOfLists = myMap.entrySet().stream()
.filter(next -> next.getKey().equals("SERVICE1"))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
listOfLists.size();
不錯,但有沒有達到同樣的結果在目前的頂級濾波離開(未來的某種方式 - > next.getKey()等於( 「SERVICE1」)),我目前已經有或者總是要返回一個列表清單。我認爲我寫的代碼差不多在那裏,但是有一些方法可以返回列表中的第一個列表。 – johnco3
@ johnco3嗯,是使用'flatMap'而不是'map',並以相同的方式過濾條目'.filter(next - > next.getKey()。equals(「SERVICE1」))。flatMap(e - > e .getValue()。stream()).filter(e - > e.getKey()== Parameter.Param1 || e.getKey()== Parameter.Param2).map(Map.Entry :: getValue).collect (...)'。但使用這種方法沒有好處,因爲您只有一個列表,因爲您對使用特定鍵的映射感興趣。 –
...除非按鍵過濾可能導致多個列表,例如'next - > next.getKey()。startsWith(「SERVICE」)'。 –