如何迭代列表< lt; string>>并创建一个列表?

发布于 2025-02-12 19:07:17 字数 1057 浏览 1 评论 0原文

我正在制作具有list< gt; gt; gt; gt; gt; gt; gt; gt; forgary代码的工作。 StudentList

每个学生对象包含两个属性:

  • 字符串名称;
  • list< address>地址;

class 地址包含两个属性housenumberstreetnumber

我想创建一个包含名称的单个列表,housenumber ,Streetnumber

housenumber是一个枚举,所以我会做.toString()和如果 null值的条件。

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);
                            });
                }
        );
        

我已经编写了此代码,但是我希望它通过使用flatmap来实现结果。

I am working on a legacy code which has a List<Student> studentList.

Each student object contains two properties:

  • String name;
  • List<Address> address;

Class Address contains two properties houseNumber and streetNumber

I want to create a single List which contains name, houseNumber, streetNumber.

houseNumber is an enum so I'll do .toString() and an if condition for null values.

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);
                            });
                }
        );
        

I have written this code but I want it to achieve the result by using flatMap.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不…忘初心 2025-02-19 19:07:17

对于每个学生,创建一个名称流和一个包含每个adress housenumber&amp; amp; amp;的平面流。 Streetnumber contert此流,Flatmap和Finaly收集:

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());

For each student create a stream of name and a flatmapped stream containing each Adress´s houseNumber & streetNumber concat this streams and flatmap and finaly collect:

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());
征棹 2025-02-19 19:07:17

愿您想要这个:

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是列表包含名称,housenumber,streetnumber的列表。

May you want this:

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 is list of list contains name, houseNumber, streetNumber.

别挽留 2025-02-19 19:07:17

您可以使用Java流API来执行此操作。我还不了解您确切要获得的结果,因此在下面的示例中,我将不同的部分连接到一个字符串中。 (有关更多信息,请查看官方API: https://docs.oracle.com/en/java/javase/12/docs/api/java/java.base/java/java/java/java/util/util/stream/stream.html#flatmap(java.util.util.function.function.function)< /a>):

studentList.stream()
            .map(l -> l.getAddressList())
            .flatMap(Collection::stream)
            .map(y -> 
                  y.getName() + " " 
                  + (y.getHouseNumber() != null ? y.getFieldResultStatus().toString() : "") + " " 
                  + y.getStreetNumber());
            })
           .collect(Collectors.toList());

You could use the Java Stream API to do this. I haven't understood what exactly you want to obtain as a result, so in the following example I concatenate the different parts into one String. (For more info check out the official 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());
笑脸一如从前 2025-02-19 19:07:17
List<String> list = students.stream()
        .flatMap(student -> student.getAddress().stream()
                .flatMap(address -> Stream.of(
                        student.getName(),
                        Objects.toString(address.getHouseNumber(), ""),
                        address.getStreetNumber()
                )))
        .toList();

根据要求,这返回一个平坦的列表,重复每个学生名称&amp;每个地址的房屋编号:学生都有:

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
List<String> list = students.stream()
        .flatMap(student -> student.getAddress().stream()
                .flatMap(address -> Stream.of(
                        student.getName(),
                        Objects.toString(address.getHouseNumber(), ""),
                        address.getStreetNumber()
                )))
        .toList();

As requested, this returns a single flattened list, repeating each student name & house number for each address the student has:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文