#java #lambda
#java #лямбда
Вопрос:
Я хотел бы знать, как мне преобразовать следующее лямбда-выражение в цикл для каждого цикла:
private static List<GrantedAuthority> mapToGrantedAuthorities(List<Authority> authorities) {
return authorities.stream()
.map(authority -> new SimpleGrantedAuthority(authority.getName().name()))
.collect(Collectors.toList());
}
Комментарии:
1. Почему вы хотите это сделать?
2. Потому что я использую JAVA 1.6
Ответ №1:
Это должно сработать:
List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
for(Authority auth : authorities)
list.add(new SimpleGrantedAuthority(auth.getName().name()));
return list;
Я предполагаю, что вы используете java ниже 1.8, вот почему вы хотите это сделать, это, вероятно, тоже быстрее.
Ответ №2:
Вы также можете использовать Google Guava (https://github.com/google/guava ), чтобы немного приблизиться к стилю Java 8 в предыдущих версиях Java:
private static List<GrantedAuthority> mapToGrantedAuthorities(final List<Authority> authorities) {
return Lists.transform(authorities, new Function<Authority,GrantedAuthority>(){
@Override
public GrantedAuthority apply(Authority authority) {
return new SimpleGrantedAuthority(authority.getName().name());
}
});
}
Ответ №3:
Основой лямбда-выражений является то, что лямбда-выражение принимает класс только с одним методом, в этом случае он выполняет цикл foreach с потоком и создает новый SimpleGrantedAuthority, используя имя из передаваемого списка, а затем возвращает другой список полномочий.
Таким образом, он получает список полномочий и возвращает тот же список, но как предоставленные полномочия.
List<GrantedAuthority> granted = new ArrayList<GrantedAuthority>();
for( Authority auth : authorities)
{
granted.add(new SimpleGrantedAuthority(auth.getName().name()));
}
return granted;
Комментарии:
1. Может быть, я просто неправильно понимаю первое предложение вашего ответа, но лямбда-выражения могут принимать произвольное количество параметров.
2. Извините, я не выразился ясно, большинство простых лямбда-вызовов полагаются на функциональные интерфейсы, функциональный интерфейс имеет ровно один абстрактный метод. — я перепутал методы и параметры, извините.