当前位置: 首页 > 知识库问答 >
问题:

如何重写这个java lambda表达式?[副本]

沙星波
2023-03-14

目前我学习Springboot。

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        Collection<GrantedAuthority> collection = new ArrayList<GrantedAuthority>();
        collection.add(()-> user.getRole().getKey());
        return collection;
    }

在这个代码中

collection.add(()-> user.getRole().getKey());

我知道这是lambda表达式,但我没有得到原始代码。这不是我的代码。你能让我知道原始代码吗?

共有2个答案

柯阳曦
2023-03-14

lambda表达式有几种类型:

  1. (int x,int y)-

因此,您的案例是第三个。当您没有将参数作为方法参数并返回一个值时使用它。在您的示例中,它只返回user.getRole(). getKey();的值,并将其添加到集合中

柳轶
2023-03-14

代码很难遵循,因为集合应该是GrantedAuthory对象的集合。GrantedAuthory是带有getAuthory()函数-https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/core/GrantedAuthority.html#getAuthority()的单个方法接口

因此,代码在这里要做的是创建一个具有GrantedAuthority的单个元素集合,其getAuthority方法返回user的值。getRole()。getKey()-无论在这个上下文中发生什么。

您可能会发现这里有一个单一用途的类更容易理解:

GrantedAuthority theOneAuthority = new GrantedAuthority() {
   String getAuthority() {
      return user.getRole().getKey();
   }
}
return List.of(theOneAuthority); // a single entry list

然而,要理解上述内容,您需要理解匿名内部类的概念——换句话说,是一种临时类型,其工作是对接口或其他类进行子类化,以执行特定方法希望我们执行的操作。

在这种情况下,lambda是更好的选择。

// as there's only one method, taking 0 parameters and returning string
// then this 0 parameter string-returning lambda can BE a `GrantedAuthority`
GrantedAuthority authFromLambda = () -> user.getRole().getKey();
 类似资料:
  • 我有下面的类和对象的ArrayList: 我想要的是从我的列表中得到一个字符串和整数地图,其中包含门票中的目的地和我列表中每个目的地的出现次数。我想它会这样开始,但是我不知道如何继续:

  • 我有一个类似这样的类: null 多谢. 注意:可以有没有管理员的用户,也可以有没有用户的管理员。

  • 正则获取指定字符到下一个大写字符之间的内容

  • 本文向大家介绍如何编写JSP表达式?,包括了如何编写JSP表达式?的使用技巧和注意事项,需要的朋友参考一下 JSP表达式元素包含一种脚本语言表达式,该脚本语言表达式经过评估,转换为String,并插入该表达式出现在JSP文件中的位置。 由于表达式的值已转换为字符串,因此可以在JSP文件的一行文本中使用表达式,无论是否用HTML标记。 expression元素可以包含根据Java语言规范有效的任何表

  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • 我想得到正则表达式所有可能值的列表。 输入: 其中,W可以是0到9之间的任意数字。i、 e.<代码>W=[0-9] 输出: 我所做的: 我正在使用Java,并决定创建一个整数数组列表。 我创建了一个方法