每个循环的Lambda表达式

时间:2016-10-17 12:49:11

标签: java lambda

我想知道如何将以下lambda表达式转换为for-each循环:

private static List<GrantedAuthority> mapToGrantedAuthorities(List<Authority> authorities) {
    return authorities.stream()
            .map(authority -> new SimpleGrantedAuthority(authority.getName().name()))
            .collect(Collectors.toList());
}

3 个答案:

答案 0 :(得分:4)

这应该有效:

List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
for(Authority auth : authorities)
    list.add(new SimpleGrantedAuthority(auth.getName().name()));
return list;

我猜你使用的是低于1.8的java,这就是你想要这样做的原因,它也可能更快。

答案 1 :(得分:0)

Lambda表达式的基础是Lambda仅使用一个方法获取一个类,在这种情况下,它使用流进行foreach循环,并使用传入的列表中的名称创建一个新的SimpleGrantedAuthority,然后返回另一份当局名单。

因此它会获取一份权威列表并返回相同的列表,但是作为GrantedAuthorities。

List<GrantedAuthority> granted = new ArrayList<GrantedAuthority>();
for( Authority auth : authorities)
{
    granted.add(new SimpleGrantedAuthority(auth.getName().name()));
}
return granted;

答案 2 :(得分:0)

您还可以使用Google Guava(https://github.com/google/guava)在以前的Java版本中更接近Java 8样式:

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());
        }
    });
}