usar programacion new icon example codigo borderfactory java list hashset brute-force

programacion - new icon java



Todos los elementos determinados de Java son iguales en una lista (3)

Este es un gran caso de uso para el método Stream.allMatch() :

boolean allMatch (predicado predicado)

Devuelve si todos los elementos de esta secuencia coinciden con el predicado proporcionado.

Incluso puede hacer que su método sea genérico, por lo que puede usarse con listas de cualquier tipo:

static boolean allElementsTheSame(List<?> templist) { return templist.stream().allMatch(e -> e.equals(templist.get(0))); }

Estoy tratando de determinar si todos los elementos de una lista son iguales. como:

(10,10,10,10,10) --> true (10,10,20,30,30) --> false

Sé que el hashset puede ser útil, pero no sé cómo escribir en java.

Este es el que he probado, pero no funcionó:

public static boolean allElementsTheSame(List<String> templist) { boolean flag = true; String first = templist.get(0); for (int i = 1; i< templist.size() && flag; i++) { if(templist.get(i) != first) flag = false; } return true; }


La frecuencia de un valor en una lista será la misma que el tamaño de la lista.

boolean allEqual = Collections.frequency(templist, list.get(0)) == templist.size()


Usando la API de Stream (Java 8+)

boolean allEqual = list.stream().distinct().limit(2).count() <= 1

o

boolean allEqual = list.isEmpty() || list.stream().allMatch(list.get(0)::equals);

Usando un Set :

boolean allEqual = new HashSet<String>(tempList).size() <= 1;

Usando un bucle:

boolean allEqual = true; for (String s : list) { if(!s.equals(list.get(0))) allEqual = false; }

Problemas con el código de OP

Dos problemas con su código:

  • Ya que estás comparando String s debes usar !templist.get(i).equals(first) lugar de != .

  • Has return true; mientras que debe ser return flag;

Aparte de eso, su algoritmo es sólido, pero podría escapar sin la flag haciendo:

String first = templist.get(0); for (int i = 1; i < templist.size(); i++) { if(!templist.get(i).equals(first)) return false; } return true;

O incluso

String first = templist.get(0); for (String s : templist) { if(!s.equals(first)) return false; } return true;