我想更新一个条目,如下所示:
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;
}
此代码向我提供了以下错误消息:
lambda表达式中使用的变量应该是最终的或有效的最终的
我该如何解决这个问题?
如果初始条目存在,实际上可以使用Optional的map方法来处理save:
public Entry updateEmail(String nom, EntryRequest entryReq) {
Optional<Entry> optional = entryRepository.findByNom(nom);
Entry updatedEntry = optional.map(entry -> {
if(!StringUtils.isEmpty(entryReq.getEmail())){
entry.setEmail(entryReq.getEmail());
}
return save(entry);
}).orElseThrow(() -> new NotFoundException(this.getClass().getName()));
return updatedEntry;
}
更简洁一点:
public Entry updateEmail(String nom, EntryRequest entryReq) {
Optional<Entry> optional = entryRepository.findByNom(nom);
return optional.map(entry -> {
if(!StringUtils.isEmpty(entryReq.getEmail())){
entry.setEmail(entryReq.getEmail());
}
return save(entry);
}).orElseThrow(() -> new NotFoundException(this.getClass().getName()));
}
不要在这里使用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);
如何在lambda表达式中将对象设置为另一个?我犯了错误
我试图在forEach循环中使用lambda表达式将每个对象计算的字符串连接到变量“i”。 它给我带来了一个错误,因为外部变量必须是final才能在lambda表达式中使用。 但是如果我将变量设置为final,我就不能更改它,代码也不能工作。 有人有解决办法吗?
我正在尝试在Java中使用Lambda表达式来理解以下方法参考代码: 我的问题是,为什么函数sameTemp只有一个参数?接口声明它必须有2个参数,所以对我来说没有意义。也许hTemp实例变量对这两个都足够了?我从Java完整参考书中获得了这一点,作者在那里解释了这一点: 块引用 在程序中,请注意HighTemp有两个实例方法:
问题内容: 我有一个对象列表。首先,我需要按类型对其进行排序。比按faceValue。最后,总结所有数量: 结果列表必须仅包含3个新硬币对象: 怎么只用一个lambda表达式写出来呢? 问题答案: 您可以使用as 解决: 或进一步复杂的一个班轮分组,总和为:
检查d1是否正确的最佳方法是什么。getDept()和d2。在进行比较之前,getDept()在以下lambda中是否为null?空检查应该在集合之前完成吗。sort()还是可以在lambda语句中完成? 我需要确保在尝试按部门排序之前,每个对象的部门数据不为空。