0
0

More than 1 year has passed since last update.

Collectors#partitioningBy(), groupingBy()

Posted at

groupingBy()はgrouping keyとなるものをFunctionとして指定
Map(key, List)をreturnする。
partitioningBy()はtrue/false conditionとなるものをPredicateとして指定
Map(key, List)をreturnする。
Collectorをsecond argumentに追加すると、Listに対してさらに処理してくれる。

class SampleClass {
    String name;
    int price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public SampleClass(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "name:" + name + ", price=" + price;
    }
}
public class Outer {
    public static void main(String[] args) {
        List<SampleClass> l = List.of(
            new SampleClass("sato-a",100),
            new SampleClass("sato-a",200),
            new SampleClass("sato-b1",300),
            new SampleClass("sato-b1",400)
        );
        Stream<SampleClass> s = l.stream();
        Map<String, Integer> mp = s.collect(Collectors.groupingBy(SampleClass::getName, Collectors.summingInt(SampleClass::getPrice)));
        System.out.println(mp);
        s = l.stream();
        Map<String, List<SampleClass>> mp3 = s.collect(Collectors.groupingBy(SampleClass::getName));
        System.out.println(mp3);
        s = l.stream();
        Map<Boolean, List<SampleClass>> mp2 = s.collect(Collectors.partitioningBy(x -> x.getName().length() == 6));
        System.out.println(mp2);
    }
}
{sato-a=300, sato-b1=700}
{sato-a=[name:sato-a, price=100, name:sato-a, price=200], sato-b1=[name:sato-b1, price=300, name:sato-b1, price=400]}
{false=[name:sato-b1, price=300, name:sato-b1, price=400], true=[name:sato-a, price=100, name:sato-a, price=200]}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0