java - 在 lambda 表达式中设置变量

标签 java java-8

我想更新如下条目:

public Entry updateEmail(String nom, EntryRequest entryReq) {
        Optional<Entry>  optional =  entryRepository.findByNom(nom);
        Entry updatedEntry = null;
        optional.ifPresent(entry -> {
            if(!StringUtils.isEmpty(entryReq.getEmail())){
                entry.setEmail(entryReq.getEmail());
            }
            updatedEntry = save(entry);
        });
        optional.orElseThrow(() -> new NotFoundException(this.getClass().getName()));
        return updatedEntry;
    }

这段代码给了我以下错误消息:

Variable used in lambda expression should be final or effectively final

我该如何解决这个问题?

最佳答案

这里不要使用 lambda

Optional<Entry>  optional =  entryRepository.findByNom(nom);
Entry updatedEntry = null;
if(optional.isPresent()){
    Entry entry=optional.get();
    if(!StringUtils.isEmpty(entryReq.getEmail())){
        entry.setEmail(entryReq.getEmail());
    }
    updatedEntry = save(entry);
});
optional.orElseThrow(() -> new NotFoundException(this.getClass().getName()));
return updatedEntry;

甚至更好

Optional<Entry>  optional =  entryRepository.findByNom(nom);
Entry entry=optional.orElseThrow(() -> new NotFoundException(this.getClass().getName()));
    if(!StringUtils.isEmpty(entryReq.getEmail())){
        entry.setEmail(entryReq.getEmail());
    } 
return save(entry);

关于java - 在 lambda 表达式中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54307436/

相关文章:

java - 线程中的异常 "AWT-EventQueue-0"java.lang.NumberFormatException : For input string :""

java - Hibernate:asm jar 在一个工作区中工作时出错,而不是在另一个工作区中工作

java - 我可以使用 Comparable 来使 TreeSet 有序吗?

lambda - Java 8 Lambda 表达式中的分组依据

将函数返回值中的对象添加到列表时的Java 8 Stream异常处理

java - 为什么 Java 8 中的新 java.util.Arrays 方法没有为所有原始类型重载?

Java 用 Enter 按钮中断 while 循环

Java 8 嵌套(多级)分组依据

java - 查找流中小于最大值几次的值

java - 哪些 Java 代码会强制 javac 1.6 使用 'swap' 和 'nop' 操作码?