如何使用内部列表流式传输列表

tom*_*y79 4 java java-8 java-stream

我需要一些有关 Java 8 中的流的帮助。我有一个带有内部整数列表的名称列表,如以下代码和示例:

public class Test {

    private String name;    
    private List<Integer> nrList;    

    public Test() {
    }

    public Test(String name, List<Integer> nrList) {

        this.name = name;
        this.nrList = nrList;        
    }

    public String getName() {
        return name;
    }

    public List<Integer> getNrList() {
        return nrList;
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,我想要这个:

1. Alex 10 15
2. Steve 5
3. Bob 3 16 20
Run Code Online (Sandbox Code Playgroud)

流入冗余的名称列表,如下所示:

1. Alex 10
2. Alex 15
3. Steve 5
4. Bob 3
5. Bob 16
6. Bob 20
Run Code Online (Sandbox Code Playgroud)

我如何使用 Java 8 流处理这个问题?

Era*_*ran 6

您可以使用flatMap为内部列表的每个元素生成唯一的元素。

例如,如果您希望输出为 a,List<String>其中每个String都是名称和相应整数之一的串联:

List<Test> input = ...
List<String> output = input.stream()
                           .flatMap(t->t.getNrList().stream().map(i->t.getName() + " " + i))
                           .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

当然,您可以根据您的要求生成List任何元素类型的 a 作为输出(例如,List<Test>每个实例的内部列表Test只有一个元素的输出)。您只需更改传递给的映射函数map即可生成所需的实例。