我试图重写这段代码:
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);
你可以帮我找一下这个bug吗?好像,它工作正常,但不是。
答案 0 :(得分:1)
如果你的目标是找到最后一个有效索引,这是一个有效的解决方案:
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);
您可以使用reduce
函数获取最后一个有效索引
答案 1 :(得分:0)
试试这个:
return map.entrySet().stream()
.filter(entry -> entry.getValue() != null && entry.getValue() > paramValue)
.map(entry -> entry.getKey().getIndex())
.findFirst()
.orElse(0);