Ответ 1
Вы можете изменить свое решение, чтобы собрать Stream
из String
массивов в Map
(вместо использования forEach
):
Map<String, Double> kvs =
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":"))
.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1]));
Конечно, это решение не защищает от недопустимого ввода. Возможно, вы должны добавить фильтр на случай, если разделительная строка не имеет разделителя:
Map<String, Double> kvs =
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":"))
.filter(elem -> elem.length==2)
.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1]));
Это по-прежнему не защищает вас от всех недопустимых входов (например, "c:3r"
приведет к тому, что NumberFormatException
будет выбрано parseDouble
).