Все элементы, определяющие Java, одинаковы в списке

Я пытаюсь определить, одинаковы ли все элементы в списке. такие как:

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

Я знаю, что hashset может оказаться полезным, но я не знаю, как писать в java.

это тот, который я пробовал, но не работал:

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

Ответы

Ответ 1

Использование Stream API (Java 8+)

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

или

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

Использование Set :

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

Использование цикла:

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

Проблемы с кодом OP

Две проблемы с кодом:

  • Поскольку вы сравниваете String вы должны использовать !templist.get(i).equals(first) вместо !=.

  • Вы return true; в то время как это должен быть return flag;

Кроме того, ваш алгоритм звучит, но вы можете уйти без flag, выполнив:

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

Или даже

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

Ответ 2

Частота значения в списке будет такой же, как размер списка.

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

Ответ 3

Это отличный вариант использования метода Stream.allMatch():

boolean allMatch (предикат предикатов)

Возвращает, соответствуют ли все элементы этого потока предоставленному предикату.

Вы даже можете сделать свой общий метод, поэтому его можно использовать со списками любого типа:

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