Похоже, что потоки java 8 и функции отображения настолько подробны, что они не являются улучшением. Например, я написал код, который использует коллекцию для создания другой модифицированной коллекции:
private List<DartField> getDartFields(Class<?> model) {
List<DartField> fields = new ArrayList<>();
for (Field field : model.getDeclaredFields()) {
if (!Modifier.isStatic(field.getModifiers())) {
fields.add(DartField.getDartField(field));
}
}
return fields;
}
Это кажется идеальным вариантом использования для потоков java 8 и их функций, поэтому я переписал его так:
private List<DartField> getDartFields(Class<?> model) {
return Arrays.asList(model.getDeclaredFields())
.stream()
.filter(field -> !Modifier.isStatic(field.getModifiers()))
.map(field -> DartField.getDartField(field))
.collect(Collectors.toList());
}
Но я не уверен, что мне это нравится больше. Это 236 символов по сравнению с 239 в обычном стиле java. Это не кажется более или менее читаемым. Приятно, что вам не нужно объявлять ArrayList
, но необходимость вызова .collect(Collectors.toList())
и Arrays.asList
(в зависимости от типа данных) не лучше.
Есть ли некоторые практические улучшения в использовании .stream()
, подобных этому, которые я просто не получаю, или это просто забавный способ бросить любых сотрудников для цикла, которые не знают функционального программирования?
Я полагаю, что если бы я динамически проходил вокруг фильтра или карты lambdas, это было бы полезно, но если вам не нужно это делать...