小编Swa*_*aju的帖子

Java 8 Stream + Map + ForEach + Collect

我正在从文件中读取值并获取列表.如下 -

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)

lambda java-8 java-stream

6
推荐指数
1
解决办法
2万
查看次数

Guava:LinkedHashMultimap值作为列表而不是String

我正在阅读有关番石榴的文章,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核心解决方案。)

guava

1
推荐指数
1
解决办法
167
查看次数

标签 统计

guava ×1

java-8 ×1

java-stream ×1

lambda ×1