私はリストから2つの別々のグループ、エラーデータとエラーのないデータを導き出しました:
List<ProductHolder> errorOnes = holderList.stream()
.filter(holder-> (holder.getRecord().isX() || holder.getRecord().isY()))
.collect(Collectors.toList());
List<ProductHolder> nonErrorOnes = holderList.stream()
.filter(holder-> (!holder.getRecord().isX() && !holder.getRecord().isY()))
.collect(Collectors.toList());
上記には複数の呼び出しがあります
.stream()
。
を1回呼び出すだけで、上記を個別のリストに分割する方法はありますか?
.stream()
?そうすることでパフォーマンスが向上しますか?
次に、これらのデータにアクセスする方法は?マップを使用する必要があると思いますか?
回答 2 件
イントロ
Java8コレクターpartitioningByを使用できます。したがって、リストをリストのマップに分割し、そこから2つのリストを取得できます。
例List<ProductHolder> holderList = new ArrayList<>() {{ add(ProductHolder.builder().record(PRecord.builder().x(true).y(false).build()).build()); add(ProductHolder.builder().record(PRecord.builder().x(true).y(true).build()).build()); add(ProductHolder.builder().record(PRecord.builder().x(false).y(false).build()).build()); add(ProductHolder.builder().record(PRecord.builder().x(false).y(false).build()).build()); add(ProductHolder.builder().record(PRecord.builder().x(false).y(false).build()).build()); }}; Map<Boolean, List<ProductHolder>> groups = holderList.stream().collect(Collectors.groupingBy(s ->!s.getRecord().isX() && !s.getRecord().isY())); List<ProductHolder> resultOne = groups.get(true); List<ProductHolder> resultTwo = groups.get(false);
https://www.baeldung.com/java-list-split
関連した質問
- Javaクラスで使用されるKotlinのAOP
- マップに値が存在するかどうかを確認し、キーを返すか、例外をスローします
- 1つが列挙型である2つのフィールドでソートする方法は?
- 5つ以上のtxtファイルを1つのファイルにJavaでマージするにはどうすればよいですか?
- グループ化、並べ替え、Javaでグループを並べ替える
- 通常のメソッドよりもラムダを使用するのはなぜですか?
- 「Java8メソッドリファレンス」オブジェクトをストリームに渡すことは可能ですか?
- ストリームJava8を使用してリストJavaで変更する
- 複数のcsvファイルからIDと外部IDを取得する方法
- Javaのメソッド内に存在するクラスのオブジェクトを作成するにはどうすればよいですか?
<ストライク>まず第一に、あなたの2つの条件は元の条件を分割しません
List
。つまり、2番目の条件は最初の条件の否定ではありません。ストライク>真のパーティショニングが必要な場合は、
Collectors.partitioningBy
:(条件を満たす)最初のパーティションは、
partition.get(true)
、および2番目の経由partition.get(false)
。