【问题标题】:migration java 7 to java 8 - forEach in forEach for a HashMap in HashMap?将 java 7 迁移到 java 8 - forEach 中的 forEach 用于 HashMap 中的 HashMap?
【发布时间】:2019-09-27 09:06:58
【问题描述】:

我的 java7 代码:

int dataIndex = 0;
final List<DataIndex> indexData = new ArrayList<>();
for (final Entry<Integer, Map<String, ModelList>> e : fusionedData.entrySet()) {
    for (final Entry<String, ModelList> e2 : e.getValue().entrySet()) {
        dataIndex++;
        indexData.add(new DataIndex(dataIndex, e2.getValue().getIds()));
    }
}

我尝试使用forEach

fusionedData.forEach(entry -> { ...??? })

我尝试使用stream + map

fusionedData.entrySet().stream().map(Map.Entry::getValue)...???

【问题讨论】:

    标签: java arrays lambda java-8


    【解决方案1】:
    AtomicInteger dataIndex = new AtomicInteger();
    final List<DataIndex> indexData = fusionedData.values().stream()
        .flatMap(models-> models.values().stream()) // Stream<ModelList>
        .map(ModelList::getIds)
        .map(ids -> new DataIndex(dataIndex.incrementAndGet(), ids))
        .collect(Collectors.toList());
    

    【讨论】:

      【解决方案2】:

      试试这个:

      Map<Integer, Map<Integer, ModelList>> fusionedData;
      fusionedData.values() // Collection<Map<Integer, ModelList>
              .stream() // Stream<Map<Integer, ModelList>>
              .flatMap(map -> map.values().stream()) // Stream<ModelList>
              .forEach(value -> {
                  // here value is instance of ModelList
                  // do something with that
              });
      

      【讨论】:

        猜你喜欢
        • 2020-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多