Creare il proprio collector

  • Con il metodo statico Collector.of che prende in input 4 argomenti: un supplier per creare la rappresentazione interna, l’accumulator che aggiorna al rappresentazione con il nuovo elemento, combiner che “fonde” due rappresentazioni ottenute in modo parallelo e il finisher, chiamato alla fine, che trasforma il tutto nel tipo finale
Collector<Person, StringJoiner, String> personNameCollector 
	= Collector.of(
		()-> new StringJoiner("|"), //supplier
		(j, p) -> j.add(p.name.toUpperCase()), //accumulator
		(j1, j2) -> j1.merge(j2) //combiner
		StringJoiner::toString); //finisher
String names = people.stream()
							.collect(personNameCollector);
Sysyem.out.println(names); //MAX|PETER|PAMELA|DAVID