Создать карту с помощью SimpleEntry и StreamEx
Я видел пример StreamEx, который довольно хорош и который выглядит так
Map<String, String> toMap = StreamEx.of(splittedTimeUnit1)
.pairMap((s1, s2) -> s1.matches("-?\\d+(\\.\\d+)?") ? new String[]{s2, s1} : null)
.nonNull()
.toMap(a -> a[0], a -> a[1]);
Это хорошо работает, и мой вывод {seconds=1, minutes=1}
это нормально. Не идеально, потому что я должен преобразовать число позже.
Я пытался оптимизировать с SimpleEntry<String,Integer>
:
Map<String, String> toMap2 = StreamEx.of(splittedTimeUnit1)
.pairMap((s1, s2) -> s1.matches("-?\\d+(\\.\\d+)?") ? new SimpleEntry<>(s1,s2) : null)
.nonNull()
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
который компилируется, но теперь у меня есть проблема, что некоторые значения помещаются в карту несколько раз, что приводит к Exception in thread "main" java.lang.IllegalStateException: Duplicate key minutes
Как я могу это исправить?
РЕДАКТИРОВАТЬ
Глупая ошибка: я забыл переключить s1 и s2 на втором примере
Map<String, String> toMap2 = StreamEx.of(splittedTimeUnit1)
.pairMap((s1, s2) -> s1.matches("-?\\d+(\\.\\d+)?") ? new SimpleEntry<>(s2,s1) : null)
.nonNull()
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
1 ответ
Решение
Утверждение кажется правильным, я думаю проблема была в том, что я забыл переключить s1 и s2. Если я переключу их, все работает как положено, спасибо.