LambdaにおけるgroupByパケットの使い方
2773 ワード
今回のブログでは、lambdaにおけるgroupByグループ文法の使い方をご紹介します
まず、新しいオブジェクトを作成し、このオブジェクトの集合によって学習します.
簡単なクラスで、gradeは学年を表し、isBoyは性別を表し、男性はtrueである.
@Data、@Builderはlombokプラグインの注記であり、get/set/equals/toString/Builderの生成などの方法を支援します.
次に、テストクラスを作成します.
まず、統合の初期化を行います.
次にグループ化します.
ここではgradeに基づいてグループ化し,keyはgrade,valueは対応するPersonの集合である.
persons.stream():コレクションをストリームに変換し、lambda式を使用できます.
.collect():収集器に相当し、グループ化されたストリームを収集できます.
groupingBy():今回のグループ化で使用したグループ化ツールはgradeに従ってグループ化します.
Person::getGrade:PersonのgetGradeメソッドを呼び出す
出力された結果は次のとおりです.
gradeに従ってグループ化する作業が完了したことがわかります.
さらに抽出を行う場合は、groupingBy()は、次のような方法を提供します.
我々はgroupingByメソッドの内部で,isBoyというフィールドの値だけを取り出して収集する細分化を行った.
次は出力の結果です.
Lambda式は私たちに多くの簡単な使い方を提供して開発を助けてくれて、皆さんが収穫があることを望んでいます.
まず、新しいオブジェクトを作成し、このオブジェクトの集合によって学習します.
@Data
@Builder
public class Person (){
private int grade;
private boolean isBoy;
}
簡単なクラスで、gradeは学年を表し、isBoyは性別を表し、男性はtrueである.
@Data、@Builderはlombokプラグインの注記であり、get/set/equals/toString/Builderの生成などの方法を支援します.
次に、テストクラスを作成します.
public class GroupBy_Lambda{
omitted....
}
まず、統合の初期化を行います.
private static List init (){
List persons = new ArrayList<>();
for ( int i = 0; i < 20; i++ ){
Person.PersonBuilder personBuilder = Person.builder();
personBuilder.grade(i % 2);
Person person = i % 2 == 0 ? personBuilder.isBoy(true).build() : personBuilder.isBoy(false).build();
persons.add(person);
}
return persons;
}
次にグループ化します.
List persons = init();
Map> groupByGrade = persons.stream()
.collect(groupingBy(Person::getGrade));
System.out.println(groupByGrade);
ここではgradeに基づいてグループ化し,keyはgrade,valueは対応するPersonの集合である.
persons.stream():コレクションをストリームに変換し、lambda式を使用できます.
.collect():収集器に相当し、グループ化されたストリームを収集できます.
groupingBy():今回のグループ化で使用したグループ化ツールはgradeに従ってグループ化します.
Person::getGrade:PersonのgetGradeメソッドを呼び出す
出力された結果は次のとおりです.
{0=[Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true)],
1=[Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false)]}
gradeに従ってグループ化する作業が完了したことがわかります.
さらに抽出を行う場合は、groupingBy()は、次のような方法を提供します.
Map> groupByGrade_sex = persons.stream()
.collect(groupingBy(Person::getGrade,
mapping(Person::isBoy, toList())));
System.out.println(groupByGrade_sex)
我々はgroupingByメソッドの内部で,isBoyというフィールドの値だけを取り出して収集する細分化を行った.
次は出力の結果です.
{0=[true, true, true, true, true, true, true, true, true, true],
1=[false, false, false, false, false, false, false, false, false, false]}
Lambda式は私たちに多くの簡単な使い方を提供して開発を助けてくれて、皆さんが収穫があることを望んでいます.