给定人员列表,如何在不使用java8中的forEach的情况下,在一行代码中迭代所有名称? 请在下面的代码的注释中查看问题。

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List<ArrayList<Person>> llist = new ArrayList<ArrayList<Person>>();

        ArrayList<Person> list1 = new ArrayList<>();
        list1.add(new Person("aaa"));
        list1.add(new Person("bbb"));

        ArrayList<Person> list2 = new ArrayList<>();
        list2.add(new Person("ccc"));
        list2.add(new Person("ddd"));

        llist.add(list1);
        llist.add(list2);

        // how to change this part into one line in java 8?
        llist.forEach(l -> {
            l.forEach(p -> {
                System.out.println(p.getName());
            });
        });

    }

    static class Person {
        String name;

        Person(String name) {
            this.name = name;
        }

        public String getName() {
            return this.name;
        }

        public String toString() {
            return "" + this.name;
        }
    }
}

#1楼 票数:4

不使用forEach的“一行”代码:

llist.stream().flatMap(Collection::stream).peek(System.out::println).collect(Collectors.toList());

#2楼 票数:2

在这种情况下,您可以简化为

    llist.forEach(l -> l.forEach(System.out::println));

(因为Person类的toString()方法返回的内容基本上与getName()相同)。

#3楼 票数:0

没有forEach,那么是这样的吗?

llist.stream().filter(ll -> {
        ll.stream().filter(l -> {
            System.out.println("do something on " + l);
            return true;
        }).toArray();

        return true;
    }).collect(Collectors.toList());

#4楼 票数:0

并不是完全有用,但是根据需要, 没有forEach

Iterator<String> iterator = llist.stream().flatMap(Collection::stream).map(Person::getName).iterator();  while(iterator.hasNext());

而且甚至没有一个班轮,因为有欺骗性将while放在同一行。

这里的重点是使用flatMap(Collection::stream)List<List<Person>>展平为List<Person> ,然后使用mapPerson获取name 从那时起,它很大程度上取决于迭代期间将要发生的事情,如果它确实是System.out.println那么没有什么比forEach 确实, forEach是唯一正确的事情。 那会是

llist.stream().flatMap(Collection::stream).map(Person::getName).forEach(System.out::println);

  ask by user2761895 translate from so

未解决问题?本站智能推荐:

2回复

Person 对象包含 EnumSet。 如何转换列表到 EnumMap > 使用聚合函数 / lambdas

我正在尝试学习 Java 中的聚合函数和lambdas 。 我有一堂课: 和这个类的对象列表。 我想将它转换为EnumMap<Privilege, List<String>> ,其中 List 包含所有具有特定特权的人的姓名。 我创建了一个方法来做到这一点: 我如何使
1回复

转换列表到地图 > 使用 Lambda

我想将列表转换为地图,如下所示。 这是示例。 我有学生列表,类似于下面的代码片段。 从中获取一个 Hasmap,其中 Key 为 Integer,Age 为 Age,值为 List。 从下面的输入源中,我的响应应该如下所示。 我如何实现这一目标? 地图[[10, {1}], [20, {2,3
1回复

转换列表到地图 > 按文档对象中的一个变量分组,其中一行包含 Java 8 流 (lamda)

我有一个对象列表,我想将它转换成一个 Map,它由对象中的一个变量分组。 下面是我得到的冗长代码。 有人可以帮我在一行中做到这一点吗?
2回复

如何转换List 到地图 >而不是地图 >?

考虑Person类有三个字段名称(String),age(int),salary(double)。 我想创建一个名称为key,值为salary(而不是Person对象本身)的映射,如果key不唯一,则使用linkedList保存所有重复键的值。 我指的是下面给出的链接中给出的解决方案
1回复

转换地图 > 到地图 >,使用 Java 8 流。 我做了这个,但是没有 for 循环怎么做

代码中的for循环需要换成java8流。 我该如何解决这个问题? 这是 MAP 迭代函数中的 for 循环。 而不是这个,我必须使用流。
2回复

使用Java 8流,如何转换Map >>到地图 >?

所以我有一个Map<String, Map<String, List<Person>>> ,我想将其转换为Map<Integer, Map<String, Integer>> ,其中第一个Integer键代表数字1,2,3。 ...(从
2回复

为什么这个功能 ,String>不起作用?

我正在研究Function并且已经尝试过 这样可以工作并在索引1上打印此人的姓名; 但是现在我想创建Function<List<Person>,String>以遍历List中的所有人员 它引发错误,因为“ void无法转换为String”
1回复

转换列表 > 到 Java 8 中的 int[][] [重复]

这个问题在这里已经有了答案: 将 List<List<Integer>> 转换为 int[][] (5 个回答)