J'ai un problème comme suit. Il y a deux listes entier a et b avec une taille égale. Maintenant, je veux comparer à la fois la valeur de la liste au même index. Mon retour de la fonction liste avec 2 valeurs. La première valeur est compte d'une plus grande valeur dans la liste a. La seconde valeur est compte d'une plus grande valeur dans la liste b. Si les deux a la même valeur que ne incrément du nombre.
puis-je obtenir une idée comment il peut être réalisé en utilisant java8 flux / filtre / prédicats
J'avais retrun la méthode ancienne version java.
static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
List<Integer> list = new ArrayList<Integer>();
int asize = 0;
int bsize = 0;
for (int i = 0; i <b.size();i++) {
if(a.get(i) > b.get(i)) {
asize++;
}else if(a.get(i) < b.get(i)) {
bsize++;
}
}
list.add(asize);
list.add(bsize);
return list;
}
EG1. Entrée: a = 5 6 7 b = 3 6 10 Sortie: 1 1 exemple 2. Entrée: a = 17 b = 28 30 99 16 8 Sortie: 1 2
Premier filtre toutes les valeurs égales. Ensuite , créez une carte avec une clé booléenne, qui indique si la valeur donnée dans a
est inférieure ou supérieure à la valeur correspondante b
. Enfin utiliser le collecteur de comptage pour obtenir le nombre pour chaque catégorie. Voici à quoi il ressemble.
Collection<Long> gtAndLtCount = IntStream.range(0, a.size())
.filter(i -> a.get(i) != b.get(i)).boxed()
.collect(Collectors.partitioningBy(i -> a.get(i) < b.get(i), Collectors.counting()))
.values();