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 serreturn 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;