Карта потоков Java 8 в наборе записей ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Карта потоков Java 8 в наборе записей

Сообщение Anonymous »

Я пытаюсь выполнить операцию с картой для каждой записи в объекте Map.

Мне нужно снять префикс с ключа и преобразовать значение из одного типа в другой. Мой код берет записи конфигурации из Map и преобразует их в Map (

Код: Выделить всё

AttributeType
— это просто класс, содержащий некоторую информацию. Дальнейшее объяснение для этого вопроса не имеет значения.)

Лучшее, что мне удалось получить с помощью потоков Java 8, это следующее:

Код: Выделить всё

private Map mapConfig(Map input, String prefix) {
int subLength = prefix.length();
return input.entrySet().stream().flatMap((Map.Entry e) -> {
HashMap r = new HashMap();
r.put(e.getKey().substring(subLength), AttributeType.GetByName(e.getValue()));
return r.entrySet().stream();
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
Невозможность создать Map.Entry из-за того, что он является интерфейсом, приводит к созданию экземпляра Map.Entry с одной записью и использованию FlatMap(), что кажется некрасивым.

Есть ли лучшая альтернатива? Кажется, удобнее сделать это с помощью цикла for:

Код: Выделить всё

private Map mapConfig(Map input, String prefix) {
Map result = new HashMap();
int subLength = prefix.length();
for(Map.Entry entry : input.entrySet()) {
result.put(entry.getKey().substring(subLength), AttributeType.GetByName( entry.getValue()));
}
return result;
}
Следует ли мне избегать использования Stream API для этого? Или есть более приятный способ, который я пропустил?

Подробнее здесь: https://stackoverflow.com/questions/272 ... -entry-set

Вернуться в «JAVA»