2017-11-30 14 views
1

とラムダとのforeachを交換し、私はこのコードの一部を書き換えるしようとしている:はオプション

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); 

あなたは私にはバグを見つける助けてくださいもらえますか?それはうまく動作しますが、そうではありません。

+0

マップは「SortedMap」ですか? – Flown

+0

あなたがしようとしていることを私たちに説明できますか?完全なコードを投稿してください –

答えて

0

この試してみてください:あなたの目標は、最後の有効なインデックスを見つけることである場合は、ここで有効なソリューションです

return map.entrySet().stream() 
      .filter(entry -> entry.getValue() != null && entry.getValue() > paramValue) 
      .map(entry -> entry.getKey().getIndex()) 
      .findFirst() 
      .orElse(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機能を使用することができます

+0

こんにちは!これは、命令コードと同じことをしません。すなわち、値 '[1,2,3,4,1,2,3]と'値= 3 'で試してください。 'lastValidIndex'は最初の' 3'(リストの2番目の位置)に対応し、コードは最後の '3'に対応するインデックスを返します(6番目の位置にあるインデックスリスト)。 –

+0

最初の有効なインデックスを取得する必要がありますか? '.findFirst()' –

+0

によって '.reduce((previousIndex、curIndex) - > curIndex)を置き換えて、最初の' 1'に対応する 'lastValidIndex'を返します(リストの0番目の位置) –