Estoy intentando conseguir el mayor valor mediante la aplicación de un filtro
Tengo un objeto que contiene un objeto de equipo y una lista de las tarjetas. así que necesito para obtener el valor más alto de la lista de tarjetas en el atributo de peso tarjeta, donde el equipo es A, y devolver al jugador.
public class Player {
private String name;
private List<Card> cards;
private Team team;
// getters and setters
}
public class Team {
private int id;
private int points;
// getters and setters
}
public class Card {
private int weightCard;
// getters and setters
}
el código que yo estaba tratando de ejecutar
int maxPointsTeamA = players
.stream()
.filter( x -> x.getTeam().equals(teamA))
.map(n -> n.getCards()
.stream()
.map( c -> c.getWeigthCard()).max(Comparator.naturalOrder()));
jugadores es una lista de jugadores (4 jugadores)
error:
Type mismatch: cannot convert from Stream<Object> to int
ayudarme por favor, es para el trabajo académico
Reemplazar ambos de sus map
llamadas a mapToInt
, para empezar. A continuación, no es necesario el Comparator.naturalOrder()
.
En segundo lugar, la primera llamada mapa contiene este lambda:
n -> n.getCards().stream().map(c -> c.getWeightCard())
.
Eso convierte un solo 'n', sea lo que sea, en una corriente de cualesquiera rendimientos weightcard (que no es el código que ha pegado). El punto de map
es convertir una cosa en uno otra cosa, no una corriente de cosas. Se puede utilizar flatmap
para ese lugar, por lo que presumiblemente, primero flatMap a una corriente de tarjetas, a continuación, asignar un int que a través de la función weightcard, y luego se puede máx.
Poniendolo todo junto:
int maxPointsTeamA = players
.stream()
.filter(x -> x.getTeam().equals(teamA))
.flatMap(n -> n.getCards().stream())
.mapToInt(c -> c.getWeightCard())
.max()
.orElse(0);
EDIT: Ah, sí, se me olvidó max () devuelve una OptionalInt; fijo.