Лямбда-выражение для каждого цикла

#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. Извините, я не выразился ясно, большинство простых лямбда-вызовов полагаются на функциональные интерфейсы, функциональный интерфейс имеет ровно один абстрактный метод. — я перепутал методы и параметры, извините.