私は、コレクタインタフェースを実装し、そのメソッドをオーバーライドしてカスタムコレクタを実装しました。コレクターの実装は次のとおりです。Java 8ストリーム - カスタムコレクタを使用する場合のNullPointerException
class MyCustomCollector implements Collector<Person, StringJoiner, String>{
@Override
public Supplier<StringJoiner> supplier() {
// TODO Auto-generated method stub
return() -> new StringJoiner("|");
}
@Override
public BiConsumer<StringJoiner, Person> accumulator() {
// TODO Auto-generated method stub
return (joiner,person) -> joiner.add(person.name.toUpperCase());
}
@Override
public BinaryOperator<StringJoiner> combiner() {
// TODO Auto-generated method stub
return (joiner1, joiner2) -> joiner1.merge(joiner2);
}
@Override
public Function<StringJoiner, String> finisher() {
// TODO Auto-generated method stub
return StringJoiner::toString;
}
@Override
public Set<java.util.stream.Collector.Characteristics> characteristics() {
// TODO Auto-generated method stub
return null;
}
}
はここに私のPersonクラスである:ここで
class Person implements Comparable<Object>{
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name;
}
public int compareTo(Object obj){
int returnValue;
if(age ==((Person) obj).age)
returnValue=0;
else
if(age >((Person) obj).age)
returnValue = 1;
else
returnValue =-1;
return returnValue;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
return (age == ((Person) obj).age);
}
public int hashCode()
{
return name.hashCode();
}
}
そして、私の呼び出し文である...
List<Person> persons =
Arrays.asList(
new Person("Max", 18),
new Person("Peter", 23),
new Person("Pamela", 23),
new Person("David", 12),
new Person("Pam", 23));
String names2 = persons.stream()
.collect(new MyCustomCollector());
上記のステートメントが実行されます
、私は次のようにNullPointerExceptionを取得しました:スレッド "main"の例外java.lang.NullPointerException java.util.stream.ReduceOps $ 3.getOpFlags(ReduceOps.java:185) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) java.util.stream.ReferencePipeline.collectでcom.my.j8.TestStreams.mainで(ReferencePipeline.java:499) (TestStreams.java:231)
私は間違いを犯していた場合、誰もが言うことができます?ここで
ヒント:あなたのプログラムで 'null'を探すことから始めます。 –
GhostCat私はまったくそれをしなかった。 – KayV
クイックフィードバックをありがとう! – GhostCat