在Java 8中基于列表过滤HashMap

时间:2019-07-23 17:04:15

标签: java lambda

我有一个地图,该地图需要根据另一个数组列表进行过滤。 目前,我使用的是在列表上运行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);
                }
            }
        }
    }
});

1 个答案:

答案 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;
   }