我需要一些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;
}
}
例如,我想要这个:
1. Alex 10 15
2. Steve 5
3. Bob 3 16 20
流入一个冗余的名称列表,如下所示:
1. Alex 10
2. Alex 15
3. Steve 5
4. Bob 3
5. Bob 16
6. Bob 20
如何使用Java 8流处理此问题?
答案 0 :(得分:1)
您可以使用flatMap
为内部列表的每个元素生成唯一元素。
例如,如果您希望输出为List<String>
,其中每个String
是一个名称和一个相应整数的串联:
List<Test> input = ...
List<String> output = input.stream()
.flatMap(t->t.getNrList().stream().map(i->t.getName() + " " + i))
.collect(Collectors.toList());
当然,您可以生成任何元素类型的List
作为输出(例如,List<Test>
输出,其中每个Test
实例的内部列表只有一个元素),具体取决于根据您的要求。您只需更改传递给map
的映射函数即可生成所需的实例。
答案 1 :(得分:1)
如果我理解正确,你想要做的是:
List<Test> lt = new ArrayList<>();
lt.add(new Test("1", Arrays.asList(1, 2, 3)));
lt.add(new Test("2", Arrays.asList(2, 3, 4)));
List<Test> lt2 =
lt.stream()
.map(test ->
test.getNrList().stream()
.map(number -> new Test(test.getName(), Arrays.asList(number)))
.collect(Collectors.toList()))
.flatMap(l -> l.stream())
.collect(Collectors.toList());