用lambda替换foreach,并使用可选的

用lambda替换foreach,并使用可选的,lambda,java-8,optional,Lambda,Java 8,Optional,我正试图重写这段代码: Integer lastValidIndex = 0; if (value != null) { for(Entry<Key, Integer> entry : map.entrySet()) { Integer cur = entry.getValue(); if (cur != null) { if( cur > value ) break; lastValidI

我正试图重写这段代码:

Integer lastValidIndex = 0;
if (value != null) {
    for(Entry<Key, Integer> entry : map.entrySet()) {
        Integer cur = entry.getValue();
        if (cur != null) {
            if( cur > value ) break;
            lastValidIndex = entry.getKey().getIndex();
        }
    }
}
return lastValidIndex;


return Optional.ofNullable(score).map(paramValue -> {
  Optional<Entry<PathwaysProgressType, Integer>> optionalEntry = 
        map.entrySet()
           .stream()
           .filter(entry -> entry.getValue() > paramValue)
           .findFirst();

  return optionalEntry
         .map(entry -> entry.getKey().getIndex())
         .orElse(0);
}).orElse(0);
整数lastValidIndex=0;
if(值!=null){
for(条目:map.entrySet()){
整数cur=entry.getValue();
如果(cur!=null){
如果(电流>值)中断;
lastValidIndex=entry.getKey().getIndex();
}
}
}
返回lastValidIndex;
返回可选的.ofNullable(score).map(paramValue->{
可选选项条目=
map.entrySet()
.stream()
.filter(entry->entry.getValue()>paramValue)
.findFirst();
返回可选条目
.map(entry->entry.getKey().getIndex())
.orElse(0);
}).orElse(0);
你能帮我找到窃听器吗?看起来不错,但不行。

试试这个:

return map.entrySet().stream()
            .filter(entry -> entry.getValue() != null && entry.getValue() > paramValue)
            .map(entry -> entry.getKey().getIndex())
            .findFirst()
            .orElse(0);

如果您的目标是查找最后一个有效索引,那么以下是一个有效的解决方案:

return Optional.ofNullable(score).map(paramValue -> 
     map.entrySet()
        .stream()
        .filter( entry -> entry.getValue() <= paramValue )
        .map( entry -> entry.getKey().getIndex() )
        .reduce( (previousIndex, curIndex) -> curIndex )
        .orElse(0)
).orElse(0);
返回可选的.ofNullable(score).map(paramValue->
map.entrySet()
.stream()
.filter(条目->条目.getValue()条目.getKey().getIndex())
.reduce((以前的索引,curIndex)->curIndex)
.orElse(0)
).orElse(0);

您可以使用
reduce
功能获取最后一个有效索引

您的地图是否为
SortedMap
?您能解释一下您想做什么吗?请张贴完整的代码嗨!这与命令式代码不同,即尝试使用值
[1,2,3,4,1,2,3]
value=3
lastValidIndex
应该是与第一个
3
相对应的索引(位于列表第二位置的索引),而您的代码返回与最后一个
3
相对应的索引(位于列表第六位置的索引)。因此,您需要获取第一个有效索引吗?只需将
.reduce((以前的索引,curIndex)->curIndex)
替换为
.findFirst()
,它将返回与第一个
1
相对应的
lastValidIndex
(列表中第0位的索引)。此代码未编译错误是什么?它在我的电脑上编译