2017-04-26 4 views
4

として:JAVA 8を使用してマップから最初のキー値を取得する方法は?今私がやっているため

Map<Item, Boolean> processedItem = processedItemMap.get(i); 

     Map.Entry<Item, Boolean> entrySet = getNextPosition(processedItem); 

     Item key = entrySet.getKey(); 
     Boolean value = entrySet.getValue(); 


public static Map.Entry<Item, Boolean> getNextPosition(Map<Item, Boolean> processedItem) { 
     return processedItem.entrySet().iterator().next(); 
    } 

はjava8でこれを行うにはどのクリーナー方法はありますか?

答えて

7

私はあなたの方法には二つの問題を参照してください。マップはHashMap

  • 空の場合に例外をスローします

    • は、例えば、何の秩序を持っていない - ので、あなたの方法は本当にgetAny()の詳細ですgetNext()より。

      //if order is important, e.g. with a TreeMap/LinkedHashMap 
      map.entrySet().stream().findFirst(); 
      
      //if order is not important or with unordered maps (HashMap...) 
      map.entrySet().stream().findAny(); 
      

      Optionalを返します:あなたが使用できるストリームのいずれかで

    +0

    ええ、私はTreeMapに変更します。あなたはどうすれば私がちょうど.get()を使うことができるかを入力して、オプション – user3407267

    +0

    から教えてもらえますか? – user3407267

    +0

    @ user3407267 'if(opt.isPresent())Entry e = opt.get();そうでなければdoSomethingElse(); 'などです。あなたが必要/望むものに応じて、他の方法があります。 – assylias

    6

    あなたは

    Optional<Map.Entry<Item, Boolean>> firstEntry =  
         processedItem.entrySet().stream().findFirst(); 
    

    ここfindFirstを必要とするように明らかにHashMapは何の秩序を持っていないので、FindFirstのは別の通話に異なる結果を返すことがありますようです。おそらくより適切な方法はfindAnyです。

    関連する問題