У меня есть поток элементов в виде 2-D массива или EntrySet
. Мне нужно, чтобы они были собраны в Map
. Теперь проблема в том, что поток элементов может иметь дублирующиеся элементы. Допустим, я хочу, чтобы значение было списком:
Map<String,List<String>>
Пример:
class MapUtils
{
// Function to get Stream of String[]
private static Stream<String[]> getMapStream()
{
return Stream.of(new String[][] {
{"CAR", "Audi"},
{"BIKE", "Harley Davidson"},
{"BIKE", "Pulsar"}
});
}
// Program to convert Stream to Map in Java 8
public static void main(String args[])
{
// get stream of String[]
Stream<String[]> stream = getMapStream();
// construct a new map from the stream
Map<String, String> vehicle =
stream.collect(Collectors.toMap(e -> e[0], e -> e[1]));
System.out.println(vehicle);
}
}
Выход:
java.lang.IllegalStateException: Duplicate key Harley Davidson
Я бы хотел, чтобы
- Я могу оперировать на
e->e[0]
и e->e[1]
, чтобы решить проблему. Это возможно? Для этого мне нужен доступ к текущему объекту карты, который собирается. Я не уверен, имеет ли это смысл.
- Способ достижения этого с помощью потоков Java 8.
Ожидаемый результат:
{CAR=[Audi], BIKE=[Harley Davidson, Pulsar]}