我正在开发一个遗留代码,它有一个
List<Student> studentList
。String name;
List<Address> address;
类
Address
包含两个属性 houseNumber
和 streetNumber
我想创建一个包含
name, houseNumber, streetNumber
的单个列表。.toString()
和 if
空值条件。final List<String> finalList = new ArrayList<>();
studentList
.forEach(x -> {
x.getAddressList()
.forEach(y -> {
finalList.add(x.getName);
finalList.add(y.getHouseNumber != null ?
y.getHouseNumber.toString() : "");
finalList.add(y.getStreetNumber);
});
}
);
我已经编写了这段代码,但我希望它通过使用平面地图来实现结果。任何帮助将不胜感激
为每个学生创建一个名称流和一个包含每个
Adress
´s houseNumber
和 streetNumber
的平面映射流,连接此流和平面映射并最终收集:
List<String> finalList =
studentList.stream()
.flatMap(student -> Stream.concat(
Stream.of(student.getName()),
student.getAddress().stream().flatMap(address ->
Stream.of(address.getHouseNumber() != null ? address.getHouseNumber().toString() : "",
address.getStreetNumber()))))
.collect(Collectors.toList());
你想要这个吗:
var rs = lst.stream().flatMap(x -> x.getAddress().stream()
.map(y -> List.of(x.getName(),
y.getHouseNumber() != null ? y.getHouseNumber().toString() : "",
y.getStreetNumber())
)).collect(Collectors.toList());
rs
是包含姓名、房屋号码、街道号码的列表。
您可以使用 Java Stream API 来执行此操作。我还不明白您到底想要获得什么结果,因此在下面的示例中,我将不同的部分连接成一个字符串。 (有关更多信息,请查看官方 API:https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/stream/Stream.html#flatMap(java .util.function.Function)):
studentList.stream()
.map(l -> l.getAddressList())
.flatMap(Collection::stream)
.map(y ->
y.getName() + " "
+ (y.getHouseNumber() != null ? y.getFieldResultStatus().toString() : "") + " "
+ y.getStreetNumber());
})
.collect(Collectors.toList());
List<String> list = students.stream()
.flatMap(student -> student.getAddress().stream()
.flatMap(address -> Stream.of(
student.getName(),
Objects.toString(address.getHouseNumber(), ""),
address.getStreetNumber()
)))
.toList();
根据要求,这将返回一个扁平列表,重复学生拥有的每个地址的每个学生姓名和门牌号:
students[0].name
students[0].address[0].houseNumber
students[0].address[0].streetNumber
students[0].name
students[0].address[1].houseNumber
students[0].address[1].streetNumber
…
students[n].name
students[n].address[m].houseNumber
students[n].address[m].streetNumber