Tengo un problema de la siguiente manera. Hay dos lista de números enteros a y b con igual tamaño. Ahora quiero comparar ambas valor de lista al mismo índice. Mi función devuelve una lista con las 2 valores. Primer valor es el recuento de mayor valor en la lista a. Segundo valor es el recuento de mayor valor en la lista B. Si ambos tienen mismo valor que ningún incremento en el recuento.
puedo obtener una idea de cómo se puede lograr en java8 utilizando Secuencia / filtro / predicados
Había retrun el método más antiguo en la versión de 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;
}
por ejemplo 1. De entrada: a = 5 6 7 b = 3 6 10 de salida: 1 1 por ejemplo, 2. de entrada: a = 17 28 30 b = 99 16 8 de salida: 2 1
Primer filtro a cabo todos los valores iguales. A continuación, crear un mapa con una clave booleano, que representa si el valor dado en a
es menor o mayor que el valor correspondiente en b
. Finalmente utilizar el colector de conteo para obtener el recuento de cada categoría. Así es como se ve.
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();