Je suis en train d'obtenir la valeur la plus élevée en appliquant un filtre
J'ai un objet qui contient un objet d'équipe et une liste de cartes. donc je dois obtenir la valeur la plus élevée de la liste des cartes dans l'attribut de poids de la carte, où l'équipe est A, et le retour du joueur.
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
}
le code que je tentais d'exécuter
int maxPointsTeamA = players
.stream()
.filter( x -> x.getTeam().equals(teamA))
.map(n -> n.getCards()
.stream()
.map( c -> c.getWeigthCard()).max(Comparator.naturalOrder()));
Les joueurs une liste des joueurs (4 joueurs)
Erreur:
Type mismatch: cannot convert from Stream<Object> to int
aidez-moi s'il vous plaît, il est pour le travail scolaire
Remplacez vos deux map
appels à mapToInt
, pour commencer. Ensuite , vous n'avez pas besoin Comparator.naturalOrder()
.
En second lieu, votre premier appel carte contient ce lambda:
n -> n.getCards().stream().map(c -> c.getWeightCard())
.
Cela tourne un seul « n », quel qu'il soit, dans un flux de ce que les rendements weightcard ( ce qui est le code que vous avez collé). Le point de map
est de transformer une chose en une autre chose, pas un flux de choses. Vous pouvez utiliser flatmap
pour cela au lieu, on peut donc supposer, d' abord flatMap à un flux de cartes, la carte alors que pour un int via la fonction weightcard, et vous pouvez max.
Mettre tous ensemble:
int maxPointsTeamA = players
.stream()
.filter(x -> x.getTeam().equals(teamA))
.flatMap(n -> n.getCards().stream())
.mapToInt(c -> c.getWeightCard())
.max()
.orElse(0);
EDIT: Ah, oui, j'ai oublié max () retourne un OptionalInt; fixé.