我正在从文件中读取值并获取列表.如下 -
List<String> fields = Utils.readFile("myText.txt", true);
Run Code Online (Sandbox Code Playgroud)
一旦我得到这个,List<String>我想迭代这个列表并将每个值传递给使用该值的函数,查询到DB并准备List<MyCustomObject>并返回相同的值.
在Java 7中实现非常简单,但我无法使用Stream + Map/forEach + Collect操作在Java 8中实现它.
我试过以下 -
Utils.readFile("myText-"+".txt", true)
.stream()
.map(str -> getListOfCustomObjForEachStr(str, pstmt))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但它返回List<List<MyCustomObject>>而不是合并List<MyCustomObject>
getListOfCustomObjForEachStr()方法为上面代码中传递的每个输入str返回一个List.我需要一个合并的List
有人可以指导我在这里可以做什么来获得合并列表?(我是Java 8的新手所以它似乎是一个愚蠢的问题,但任何帮助都表示赞赏)
编辑1 使用FlatMap如下所示实现 - 请建议是否有其他更好的方法来实现它.希望有一天它可以帮助某人:)继续分享.
List<MyCustomObjects> = Utils.readFile("myText-"+".txt", true)
.stream()
.map(str -> getListOfCustomObjForEachStr(str, pstmt))
.flatMap(Collection::stream)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 我正在阅读有关番石榴的文章,LinkedHashMultimap并认为这可能对我有用。
我有一张地图的要求如下:
Key:Value
A B
A C
A D
P Q
P R
Run Code Online (Sandbox Code Playgroud)
如果上面是我的地图中的输入,那么我想LinkedHashMultimap用来创建一个地图,例如:
Key : Value
A List<B,C,D>
P List<Q,R>
Run Code Online (Sandbox Code Playgroud)
尝试使用,LinkedHashMultimap但存在以下问题:
mapLen.entries().stream().forEach(entry -> {
System.out.println("mapTemp2 key + " + entry.getKey());
System.out.println("mapTemp2 value + " + entry.getValue());
});
Run Code Online (Sandbox Code Playgroud)
上方会String在地图中显示值,而不是List<String>。
有人可以指出如何做到这一点。
(请注意:我知道迭代,检查和创建列表并将其插入map的常规Java核心解决方案。)