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 流处理这个问题?
您可以使用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即可生成所需的实例。