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

如何避免变量managerId出现lambda表达式错误?[重复]

柴正祥
2023-03-14

我有一个用户表,其中我有(Id,reportingUserId)。reportingUserId 包含一个字符串,该字符串表示用户向其报告的用户 Id(上级)。现在,在删除用户时,我应该检查是否有任何用户向此用户报告。如果它们存在,那么我应该将其报告用户 Id 值更改为上级的用户 Id。此处报告用户是当前用户的劣势列表。

现在,当我这样做的时候,我得到了lambda表达式中使用的变量应该是最终的或实际上是最终的在第二个if条件的ementerId处出现错误。有什么方法可以解决这个问题吗?或者我应该使用old for循环。

String managerId = null;
if(!StringUtils.isEmpty(user.getReportingUserId())){
    Optional<User> manager =Repository.findById(Long.valueOf(user.getReportingMsisdn()));
    if(manager.isPresent())
        managerId = Long.toString(manager.get().getId());
}
if(!reportingUsers.isEmpty()) {
    reportingUsers.forEach(user -> x.setReportingUserId(managerId));
    Repository.saveAll(reportingUsers);
}

共有2个答案

商鸿哲
2023-03-14

您可以像这样重新实现负责查找< code > managerid 的部分,它将只被分配一次。

String managerId = StringUtils.isEmpty(user.getReportingUserId()) ? null : 
    repository.findById(Long.valueOf(user.getReportingMsisdn())) // Optional<User>
        .map(manager -> Long.toString(manager.getId()))          // Optional<String >
        .orElse(null);
周越泽
2023-03-14

提取计算< code>managerId的方法,并将引用定义为< code>final

final String managerId = calculateManagerId(user); 
if(!reportingUsers.isEmpty()) { 
   reportingUsers.forEach(user -> 
   x.setReportingUserId(managerId)); 
   Repository.saveAll(reportingUsers);

}


private String calculateManagerId(User user) {
 // code from the first if-condition in the question 
}
 类似资料:
  • 我现在正在学习如何使用lambda表达式,我已经看到了一些带有简单示例的教程: 但是我的编译器显示这个错误: 我是不是忘了什么?

  • 我试图在forEach循环中使用lambda表达式将每个对象计算的字符串连接到变量“i”。 它给我带来了一个错误,因为外部变量必须是final才能在lambda表达式中使用。 但是如果我将变量设置为final,我就不能更改它,代码也不能工作。 有人有解决办法吗?

  • 我正在将oracle从10升级到12,对于这个特定的项目,我遇到了以下错误: 似乎它没有识别我在DataSource上添加的配置: 我们使用的是Java 8,我们对代码有这些依赖关系: 问题是它正在为另一个项目工作(与这个项目具有相同的结构,但由于某种原因它在这里不起作用) 是否有任何遗漏或我可以找到问题并解决问题的地方?

  • 我想更新一个条目,如下所示: 此代码向我提供了以下错误消息: lambda表达式中使用的变量应该是最终的或有效的最终的 我该如何解决这个问题?

  • 我有一个反应应用程序开发的底漆-反应模板。它有一个管理仪表板,在仪表板侧板中有几条路由。我已经在我的index.js中设置了一个身份验证路由,当我访问每条路由时,它都运行得很好。但是当重新加载页面时,页面显示404页面找不到! 我保护“/”路径不受AUthrote的影响,这样每个以“/”开头的路径都受到保护(我在仪表板中有路由,如“/usertable”、“/users”、“/payments”等