【发布时间】:2018-10-12 22:54:10
【问题描述】:
我正在尝试学习如何使用 Java 8 集合,我想知道是否有一种方法可以使用 Java 流将我的列表转换为地图。
List<PrimaryCareDTO> batchList = new ArrayList<>();
PrimaryCareDTO obj = new PrimaryCareDTO();
obj.setProviderId("123");
obj.setLocatorCode("abc");
batchList.add(obj);
obj = new PrimaryCareDTO();
obj.setProviderId("456");
obj.setLocatorCode("def");
batchList.add(obj);
我想知道如何使用流将上面的列表创建到地图中。我知道如何将 foreach 等与 put 一起使用,但我只是想知道是否有更优雅的方法来使用流构建地图。 (我知道下面的语法不正确,我是流的新手,不知道怎么写)
AtomicInteger index = new AtomicInteger(0);
Map<String, Object> result = batchList.stream()
.map("providerId" + index.getAndIncrement(), PrimaryCareDTO::getProviderId)
.map("locatorCode" + index.get(), PrimaryCareDTO::getLocatorCode);
目标是代表以下内容。
Map<String, Object> map = new HashMap<>();
//Group a
map.put("providerId1", "123");
map.put("locatorCode1", "abc");
//Group b
map.put("providerId2", "456");
map.put("locatorCode2", "def");
【问题讨论】:
-
类似问题,你可以查一下。 stackoverflow.com/questions/35650974/…
-
您需要跟踪索引(例如,如果流是并行的,您的解决方案可能会中断)并且您需要为每个列表项创建两个映射条目。这两个约束不适用于流。所以可能有一个解决方案,但它可能比使用循环更难看。
-
@assylias 所以你建议坚持使用 for 循环而不是流?
-
在那个具体的例子中是的。
标签: java