我想知道如何将以下lambda表达式转换为for-each循环:
private static List<GrantedAuthority> mapToGrantedAuthorities(List<Authority> authorities) {
return authorities.stream()
.map(authority -> new SimpleGrantedAuthority(authority.getName().name()))
.collect(Collectors.toList());
}
答案 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());
}
});
}