我有一个地图,该地图需要根据另一个数组列表进行过滤。 目前,我使用的是在列表上运行forEach循环并与地图地图进行比较的实现,以构建地图的另一个过滤版本。
在Java 8中是否有更好的解决方案?
// this map has all the data
Map<String, Map<String, String>> mapOfMap = new HashMap<>();
// this is the new filtered map that i am trying to build
Map<String, Map<String, String>> filteredMap = new HashMap<>();
listofItems.forEach(item -> {
Map<String, String> itemIdMap = mapOfMap.get(item.getItemId().toString());
if (itemIdMap != null) {
String key = itemIdMap.get(item.getUT());
if (key != null) {
// setting the new map
Map<String, String> newItemMap = filteredMap.get(item.getItemId().toString());
Map<String, String> filteredUTMap = new HashMap<>();
if (newItemMap == null) {
filteredUTMap.put(item.getUT(), key);
filteredMap.put(item.getItemId().toString(), filteredUTMap);
} else {
String newKey = newItemMap.get(item.getUT());
if (newKey == null) {
filteredMap.get(item.getItemId().toString()).put(item.getUT(), key);
}
}
}
}
});
答案 0 :(得分:2)
我不确定您要过滤什么条件。 但是您可以考虑在此处使用流。
例如。
Map<String, Map<String, String>> originalMap= new HashMap<>();
originalMap.entrySet().stream().filter(this::filterMapEntry).collect(Collectors.toMap(Entry::getKey, Entry::getValue));
boolean filterMapEntry(Entry<String, Map<String, String>> entry) {
return true;
}