Можно ли использовать более одной команды в функции Map.foreach, появившейся в Java 8?

Вместо этого:

map.forEach((k, v) -> 
System.out.println(k + "=" + v));

Я хочу сделать что-то вроде:

map.forEach((k, v) -> 
System.out.println(k)), v.forEach(t->System.out.print(t.getDescription()));

Давайте представим, что k - строки, а v - множества.

Quatsch

Ответов: 3

Ответы (3)

Лямбда-синтаксис допускает два типа определений для тела:

  • одиночное выражение, возвращающее значение, например: x -> x * 2
  • несколько операторов, заключенных в фигурные скобки, например: x -> {x * = 2; вернуть x; }

Третий особый случай - это тот, который позволяет избежать использования фигурных скобок при вызове метода возврата void, например: x -> System.out.println (x).

Используйте это:

map.forEach(
    (k,v) -> {
        System.out.println(k);
        v.forEach(t->System.out.print(t.getDescription()))
    }
);

Если у вас есть поток, вы можете использовать peek ().

map.entrySet().stream()
   .peek(System.out::println) // print the entry
   .flatMap(e -> e.getValue().stream())
   .map(t -> t.getDescription())
   .forEach(System.out::println); // print all the descriptions

2022 WebDevInsider