当前位置: 首页 > 知识库问答 >
问题:

如何在Java8Streams中从forEach循环获得列表输出

高豪
2023-03-14
private class Person {
        private String name;
        private boolean isSenior;

        private Person(String name, boolean isSenior) {
            this.name = name;
            this.isSenior = isSenior;
        }

        public String getName() {
            return name;
        }

        public boolean isSenior() {
            return isSenior;
        }

        @Override
        public String toString() {
            return name + ": " + isSenior;
        }
    }

    private class PersonWrapper {
        private Person jrPerson;
        private Person srPerson;

        private PersonWrapper(Person jrPerson, Person srPerson) {
            this.jrPerson = jrPerson;
            this.srPerson = srPerson;
        }

        public Person getJrPerson() {
            return jrPerson;
        }

        public Person getSrPerson() {
            return srPerson;
        }

        @Override
        public String toString() {
            return jrPerson.toString() + "-" + srPerson.toString();
        }
    }
List<Person> jrPersons = new ArrayList<>();
List<Person> srPersons = new ArrayList<>();
jrList.add(new Person("John", false));
jrList.add(new Person("Paul", false));
jrList.add(new Person("Mike", false));

seniorList.add(new Person("John", true));
seniorList.add(new Person("Paul", true));
seniorList.add(new Person("Mike", true));
List<PersonWrapper> wrapperList = new ArrayList<>();

jrList.forEach(jr -> seniorList.stream().filter(sr -> jr.getName().equals(sr.getName())).map(sr -> new PersonWrapper(jr, sr)).collect(Collectors.toList()));

请帮助我实现这一点。

共有1个答案

能修谨
2023-03-14

不要使用foreach,而是从一开始就使用流:

List<PersonWrapper> wrapperList = jrList.stream()
    .flatMap(jr -> seniorList.stream()
         .filter(sr -> jr.getName().equals(sr.getName()))
         .map(sr -> new PersonWrapper(jr, sr))
    )
    .collect(Collectors.toList());

通过使用FlatMap,可以将一个流(stream > )扁平化为一个流(stream )

如果您不能自己实例化WrapperList,或者确实需要追加到它。您可以将上面的代码片段更改为以下内容:

List<PersonWrapper> wrapperList = new ArrayList<>();

jrList.stream()
    .flatMap(jr -> seniorList.stream()
         .filter(sr -> jr.getName().equals(sr.getName()))
         .map(sr -> new PersonWrapper(jr, sr))
    )
    .forEach(wrapperList::add);
 类似资料:
  • 我正在从我的db获取数据,我想根据需要循环 我正在从我的数据库中获取对象数组,我想通过一些更改将其转换为对象 我的数据 我想把它转换成如下-:

  • 问题内容: print_r($ samplearr)为包含3个项目的数组打印以下内容: 我想将它们放到HTML表中,所以我正在做一个foreach,但是没有达到我的期望: 正在返回: 这将是我想要的第一个输出: 要获得4722,我需要使用什么功能代替key($ item)? 问题答案: 尝试这个:

  • 问题内容: 我知道如何使用$?检查先前执行的命令的状态,我们可以使用exit命令使该状态成为当前状态。但是对于bash中的循环,总是返回状态0,有什么办法可以使循环中断某些状态。 问题答案: 循环的状态是最后执行的命令的状态。您可以使用break中断循环,但如果中断成功,则循环状态为。但是,您可以使用子shell并退出而不是中断。换一种说法: 您也可以将循环放入函数中并从中返回一个值。

  • 大家好,我正在尝试在while循环中创建foreach循环。在foreach循环中,我试图生成包含div的列表元素,但我有非常奇怪的输出 这是我的密码 这是我的调试器consonle中的一个图像 正如你在图片中看到的,在ul标签中只存在一个li,其余的都在ul /ul. 我的第一个想法是,将div标记放在li标记中是无效的,但如果在文件的顶部使用它,则不是这样 DOCTYPE html PUBLI

  • 我想制作一个程序,要求用户输入订票的客户数量,读取输入的数字,执行循环以询问每个客户的年龄,并决定每个客户的单价。到目前为止,我的代码只有if-else语句: 我如何添加一个同时循环来询问每个客户的年龄?

  • 问题内容: 我有四个foreach循环,这些循环遍历集合并根据条件进行操作。 这是我现在正在编写的代码: 主要对象(代码中的对象)来自第三方提供程序SDK,因此我无法在该部分上进行任何更改。我想问一下Stack Overflow社区是否有更好的方法来打破所有四个foreach循环。或者,如果还有其他方法可以重构此代码,使其更具可读性和可维护性。 问题答案: 在最外面的循环上使用标签,当您想跳出所有