4
我想对对象集合myClass
进行流式处理,以便使用Collectors.groupingBy()
对其进行分组。但是,我不想检索Map<String, List<myClass>>
,而是将其按照对象myOutput
分组,并检索Map<String, myOutput>
。我试图创建一个自定义的收藏家:Java 8通过对象上的收集器进行分组
List<myClass> myList = new ArrayList<myClass>();
myList.add(new myClass("a", 1));
myList.add(new myClass("a", 2));
myList.add(new myClass("b", 3));
myList.add(new myClass("b", 4));
Map<String,myOutput> myMap = myList.stream().collect(Collectors.groupingBy(myClass::getA, Collectors.of(myOutput::new, myOutput::accept, myOutput::combine)));
MyClass的:
protected String a;
protected int b;
public myClass(String aA, int aB)
{
a = aA;
b = aB;
}
public String getA()
{
return a;
}
public int getB()
{
return b;
}
MyOutput中:
protected int i;
public myOutput()
{
i = 0;
}
public void accept(myClass aMyClass)
{
i += aMyClass.getB();
}
public myOutput combine(myOutput aMyOutput)
{
i += aMyOutput.getI();
return this;
}
public int getI()
{
return i;
}
但有了这个代码,有一个与集电极的问题:
Collectors.of(myOutput::new, myOutput::accept, myOutput::combine)
我知道在这种情况下a减少会更容易,但我们假设在myOutput对象中有很多操作要做。
这位收藏家有什么问题?
谢谢。我非常接近:(肯定内置的summingInt收集器在这种情况下会是一个更好的选择,但我想用一个可以理解的例子来描述我的问题。我的需求需要更多的复合体myClass和myOutput对象。 –