Java 列表的Lambda等效值<&燃气轮机;使用属性A和返回属性B进行比较 私有日期findRecordDate(列出事件、方案){ for(DividendEvent事件:事件){ if(scheme.getName().equalsIgnoreCase(event.getScheme().getName())){ 返回事件。getRecordDate(); } } 返回null; }

Java 列表的Lambda等效值<&燃气轮机;使用属性A和返回属性B进行比较 私有日期findRecordDate(列出事件、方案){ for(DividendEvent事件:事件){ if(scheme.getName().equalsIgnoreCase(event.getScheme().getName())){ 返回事件。getRecordDate(); } } 返回null; },java,java-8,Java,Java 8,关于上述代码的lambda等价物有什么建议吗?您首先需要过滤列表,然后映射它,然后可以检索第一个匹配项 private Date findRecordDate(List<DividendEvent> events, Scheme scheme) { for (DividendEvent event : events) { if (scheme.getName().equalsIgnoreCase(event.getScheme().getNam

关于上述代码的lambda等价物有什么建议吗?

您首先需要过滤列表,然后映射它,然后可以检索第一个匹配项

private Date findRecordDate(List<DividendEvent> events, Scheme scheme) {
        for (DividendEvent event : events) {
            if (scheme.getName().equalsIgnoreCase(event.getScheme().getName())) {
                return event.getRecordDate();
            }
        }
        return null;
}
私有日期findRecordDate(列出事件、方案){
字符串名称=scheme.getName();
return events.stream().filter(e->name.equalsIgnoreCase(e.getScheme().getName())
.地图(Di)‌​videndEvent::getReco‌​(日期)
.findFirst().orElse(null);
}

谢谢,100%清楚,使用Java8功能在这个用例中有什么优势吗?@JigarNaik使用最新的Java功能并不总是解决问题的方法,但在大多数情况下,它们可以优化您的代码。一个简短的例子是在您的代码中返回
null
,这可能会导致潜在的空点执行,因此使用
Optional#orElse
可以解决这个问题(因为java-8),并且通过延迟评估,您的代码可以再次得到优化,并具有更多的好特性。阅读java-8功能及其优点可能是一个好主意。您可能已经看到我先前删除的关于调用
.get()
可能会出错的评论,并对其进行了编辑,但我认为现在它仍然不正确。您不能在可选的。。。可能类似于
.map(DividendEvent::getRecordDate).findFirst().orElse(null)
?简言之,先过滤然后映射,然后是findFirst然后是orElse。
double divident=schemeEventMap.entrySet().stream().filter(e->e.getKey().getName().equals(schemeName)).findFirst().get().getValue().getDivAmount()
是否可以在
map
中使用
可选的#orElse>
返回一个
可选的
,您可以承担全部后果并使用
.findFirst().map(e->e.getRecordDate())
返回一个
可选的
。如果您确实希望在未找到时返回
null
,那么
.findFirst().map(e->e.getRecordDate()).orElse(null)
。这是一个旁白,但既然您可以使用Java8,那么您可以使用现代的Java日期和时间类,而不必为过时的
date
类操心。例如,即使无法修改
DividendEvant
,也可以使用
Date.toInstant()
并从方法返回一个现代的
即时
private Date findRecordDate(List<DividendEvent> events, Scheme scheme) {
        String name = scheme.getName();
        return events.stream().filter(e -> name.equalsIgnoreCase(e.getScheme().getName()))
                              .map(Di‌​videndEvent::getReco‌​rdDate) 
                              .findFirst().orElse(null);
}