import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Delete
{
public static void main(String[] args)
{
List<List<String>> list = new ArrayList<>();
list.add(List.of("A","B","C","R"));
list.add(List.of("E","F","G","F"));
list.add(List.of("A","B","C","D"));
System.out.println(list.stream().distinct().count());
Map<String, Long> countMapOfColumn = list.stream()
.filter(innerList -> innerList.size() >= 3)
.map(innerList -> innerList.get(3 - 1))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(countMapOfColumn.keySet());
}
}
Quiero averiguar el único elemento de la columna 3, que son "C","G"
y hay 2
elemento único en la columna 3.
Esto se puede hacer usando loop
pero no puedo utilizar bucle. Utilización de Java stream
no puede ser una solución.
Además, ¿cómo puedo obtener el recuento de filas que tienen "A","B"
en la columna 1,2
a la vez y en general para N
las columnas?
Para su estructura de datos dada;
Map<String, Long> countMapOfColumn = list.stream()
.filter(innerList -> innerList.size() >= column)
.map(innerList -> innerList.get(column - 1))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
donde column = 3
, te llevará a un mapa con {"C", "G"}
como conjunto de claves y valores le dará el recuento de cada carácter en la columna dada. También se trabajará para matrices no uniformes, ya que simplemente se saltará las filas que no tiene una columna de orden n.
recuento único de cualquier columna será la resultante del tamaño de mapa de método de cobro; countMapOfColumn.size()
Para obtener el recuento de char individuales, utilice el mapa resultante con teclas como entrada, por ejemplo, para conseguir contar de C
en column = 3
, uso countMapOfColumn.get("C")
, que devolverá2
Pero prefiero usar de una guayaba Table
, puede seleccionar directamente cualquier fila o columna dada y sin ningún tipo de molestia, entonces sólo es, conseguir la columna n, y el filtro de nuestros duplicados.
actualizar
Para obtener el número de filas que se inician con la lista consecutiva list = {"A", "B"}
;
List<String> startingList = Arrays.asList("A", "B");
Long count = list.stream()
.filter(innerList -> innerList.size() >= startingList.size()
&& innerList.subList(0, startingList.size()).equals(startingList))
.count();