Ashishkumar Singh:
Yo sólo estaba tratando de crear algo similar a la Collectors.toList()
de la mía pero no parece funcionar
import java.util.ArrayList;
public class ShipmentTracingDTO {
boolean destination = false;
public ShipmentTracingDTO(Boolean destination) {
this.destination = destination;
}
public ShipmentTracingDTO() {
}
public static void main(String[] args) {
ArrayList<ShipmentTracingDTO> tracings = new ArrayList<>();
tracings.add(new ShipmentTracingDTO(true));
tracings.add(new ShipmentTracingDTO(true));
tracings.add(new ShipmentTracingDTO(false));
tracings.add(new ShipmentTracingDTO(false));
ArrayList<ShipmentTracingDTO> newTracings = new ArrayList<>();
// Error coming for ArrayList::new : The constructed object of type ArrayList is
//incompatible with the descriptor's return type: R
tracings.stream().collect(ArrayList::new, (left, right) -> left.add(right), (left, right) -> {
left.addAll(right);
return left;
});
}
private boolean getDestination() {
return destination;
}
}
Mi pregunta es si ArrayList::new
no funciona aquí, lo que va a trabajar. Probé diferentes variaciones pero ninguno parece funcionar
Ravindra Ranwala:
Sólo cambiarlo como tal,
tracings.stream().collect(ArrayList::new, (left, right) -> left.add(right), (left, right) -> {
left.addAll(right);
});
Lo que necesita es un BiConsumer
NO una BinaryOperator
. Lo que está pasando por encima de una BinaryOperator
.
He aquí un ejemplo BinaryOperator
.
BinaryOperator<List<Integer>> s = (left, right) -> {
left.addAll(right);
return left;
};
Como una buena práctica de ingeniería, siempre prefieren método referencias a lambdas. Así que aquí está la versión mejorada usando referencias de métodos en lugar de lambdas.
tracings.stream().collect(ArrayList::new, List::add, List::addAll);