2016-11-30 2 views
1

実用的なラムダの使用法について新しいことを学ぼうとしています。私は内部の特定の他のオブジェクトのリストを持つオブジェクトを持っているラムダを使用して排除する場合

私はこの問題を抱えています。これらのオブジェクトにはMyEnumフィールドがあります。これらのオブジェクトを繰り返し処理し、そのEnumの状態を取得し、条件に合致する場合、そのオブジェクトをList1に追加したいとします。そうでなければ、List2にオブジェクトを追加します。

基本的に2つの異なるリストに特別な条件でリストを分割する。

私はそれを達成するために2つの方法で作業しました.1つは古典的なfor-each、2番目はJava 8 lambdaです。これも私も学びたいと思っています。両方のための

マイコード:

void groupObjects() { 

    for (ListObject listObject : object.getList()) { 
     if (MyEnum.STATUS.equals(listObject.getStatus())) { 
      otherList.add(listObject); 
     } else { 
      someOtherList.add(listObject); 
     } 
    } 
} 


void groupObjects() { 

    object.getList().parallelStream() 
      .filter(listObject-> MyEnum.STATUS.equals(listObject.getStatus())) 
      .forEach(listObject-> otherList.add(listObject)); 
    object.getList().parallelStream() 
      .filter(listObject-> !MyEnum.STATUS.equals(listObject.getStatus())) 
      .forEach(listObject-> someOtherList.add(listObject)); 
} 

そして、私の頭の中で問題提起:

  1. これらはいかなる近い正しい、素敵な、以下のグッド・プラクティス・ソリューションであることにはありますか?
  2. ラムダの場合はこれが適していますか?それをもっと簡単にする方法はありますか?
  3. 多分私はこのタスクのために他のクラスやメソッドを考慮する必要がありますか?

私はすでに.parallelStream()の部分について読んでいますので、今は気にしないでください。

+0

三項式 '(MyEnum.STATUS == object.getStatus)? otherList:someOtherList'が最も簡単なアプローチかもしれません。 – chrylis

答えて

3

これはpartitioned.get(true)はあなたのステータスMyEnum.STATUSpartitioned.get(false)はあなたになかったオブジェクトを取得します持っていたオブジェクトのリストを与えるどこpartitioningBy

Map<Boolean, List<SomeClass>> partitioned = object.getList().stream() 
    .collect(partitioningBy(listObject->MyEnum.STATUS.equals(listObject.getStatus())) 

を使用することによって達成することができます。

+0

partitioningBy()はどこに定義されていますか?それは静的なインポートですか? – JustinKSU

+0

'java.util.stream.Collectors'からの静的インポート。 –

関連する問題