2017-02-10 1 views
0

Я новичок в лямбда-выражениях, и в настоящее время я застрял в задаче, которую я хотел бы решить (только ради изучения лямбда).Java lambda expression: Как объединить ключ и множество значений из хэш-карты?

Это карта Map<String, Set<Integer>>, и я хочу перебирать элементы ввода, объединяющие ключи и их значения в виде строки.

Карта может выглядеть следующим образом:

"х", [1,3,5]

"у", [2,3]

"г", [ 2,4]

И я хочу закончить с этим строковым представлением:

"x: 1, 3, 5; y: 2, 3; z: 2, 4 "

Я даже не знаю, с чего начать. Все примеры, которые можно найти в Интернете, либо просто образуют список или карту с одиночными значениями (вместо набора) и в большинстве случаев все, что они делают, это System.out.println().Я даже не могу понять, как начать ... forEach или stream? Я думаю, мне нужен один (или более?) сборщик (ы), который может присоединиться к значениям, но я просто не понимаю, как этого добиться. это возможно даже в одном выражении?

Может кто-нибудь дать мне подсказку?

ответ

4

как это

Map<String, Set<Integer>> map = new HashMap<>(); 
// fill map here 
String result = map.entrySet().stream() 
     .map(x -> x.getKey() + ": " + x.getValue().stream() 
       .map(Object::toString) 
       .collect(Collectors.joining(", "))) 
     .collect(Collectors.joining("; ")); 
+0

Спасибо! Это именно то, что я искал. – oldzitterhand