我正在尝试学习如何使用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 etc与puts一起使用,但我只是想知道是否有更优雅的方法使用流构建映射。(我知道下面的语法不正确,我是流的新手,不知道怎么写)
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");
...
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.Map.Entry;
...
AtomicInteger index = new AtomicInteger(0);
List<SimpleEntry<String, String>> providerIds =
batchList.stream()
.map(e -> new SimpleEntry<>("providerId" + index.incrementAndGet(), e.getProviderId()))
.collect(Collectors.toList());
index.set(0);
List<SimpleEntry<String, String>> locatorCodes =
batchList.stream()
.map(e -> new SimpleEntry<>("locatorCode" + index.incrementAndGet(), e.getLocatorCode()))
.collect(Collectors.toList());
Map<String, String> map = Stream.of(providerIds,
locatorCodes)
.flatMap(e -> e.stream())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
首先,它创建两个列表,使用entry
(从map
)表示字符串-字符串元组:
providerid#
作为“键”的列表,其值例如“123”
locatorcode#
作为“键”的列表,其值例如“abc”
然后创建一个包含这两个列表的流,作为“元素”,然后将这两个列表与FlatMap()
级联,以获得一个长的Entry
流,
(前两个不能保持流,而我必须通过列表
并返回到流的原因是,否则index.IncrementAndGet()
的两个调用只有在使用流时才会被计算,这是在index.set(0);
之后。)
然后使用计数器创建新的键值对,并将它们放入映射(使用collectors.tomap()
。
我已经创建了一种计算字母表中每个字符的方法。我正在学习流(函数式编程),并尝试尽可能经常地使用它们,但我不知道在这种情况下该怎么做:
如何从字符串列表中获取映射,其中索引是键,字符串是值? 如果我有这样的名单 我想要一张< code >地图 当我执行以下操作时,我得到一个错误 错误 所需类型:int提供:Object 当我将其转换为int或Integer时 我明白了 收集(java.util.function.Supplierjava.util.function.ObjIntConsumerjava.util.function.
我有下面的pojo 此employee类用于从mybatis orm获取对象列表(list)。 mybatis将输出作为列表返回,因为mybatis不支持将Map作为返回类型 我必须把它转换成地图 我尝试了下面的方法,但没有成功,因为它需要getName()和getId()方法 请告知是否有一种方法可以在不修改员工pojo的情况下使用stream实现。 注意:我知道我们可以使用ofr或for ea
问题内容: 我创建了一种计算字母数字的方法。我正在学习流(函数式编程)并尝试尽可能多地使用它们,但是在这种情况下,我不知道该怎么做: 那么,如何使用Java 8流重写它呢? 问题答案: 避免使用有状态的索引计数器,如其他答案中所述的基于-解决方案。如果流是并行的,它们将失败。相反,流式传输索引: 上面假设传入列表是字母,因此不应包含重复的字符。如果您有可能重复元素,则多个元素将映射到同一键,然后需
我有一个lambda表达式,我想在其中创建一个对象列表,但我得到了错误 错误 我希望作为lambda表达式的返回类型。我怎样才能做到呢?
我想把列表转换成地图使用作为关键值只有两个字符串值。然后作为值,从输入列表中只列出包含奇数或偶数索引位置的元素的字符串列表。以下是旧的时尚代码: 如何使用流将此代码转换为Java8以获得此结果? 我目前的混乱尝试需要修改列表的元素,但肯定是更好的选择。 或者也许有人帮我解决这个不正确的问题? 返回以下内容: