Уменьшить повторяющиеся элементы в списке

Для сжатия в новом списке без повторяющихся элементов могут быть нулевые элементы. Мне нужна помощь .

У меня есть эта ошибка «Ошибка тестера (индивидуальная доставка 4): метод возвращает [] вместо [1] при вызове с [1]».

public <E> PositionList<E> compactar (Iterable<E> lista) 
{

    if (lista == null){
        throw new IllegalArgumentException();
    }// if      

    PositionList<E> newLista = new NodePositionList<E>();   
    Iterator<E>iterator = lista.iterator();

    while(iterator.hasNext()) 
    {
        if (eqNull(iterator,iterator.next())) {          
            newLista.addLast(iterator.next());
            }//if   
    }//while 
    return newLista;
}//compactar    

// ------------- помощник ---------------------------------- ----------------------------

public static boolean eqNull (Object o1, Object o2)
{
    return o1 == o2 || o1!= null && o1.equals(o2);
    }// de eqNUll
}//  Operacioncompactar 
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
120
2

Ответы 2

Неясно, хотите ли вы удалить все дубли или просто удалить нули. Они удаляют обман.

List<Comparable> l = ...; // The source list
List<Comparable> nl = new ArrayList<>(); // New list without dupes
Collections.sort(l);
Comparable last = UUIDs.randomUUID().toString(); // This one will never be in our source list
for (Comparable c: l) {
  if (!Objects.equal(c, last)) { // Or some other null-safe equals function
    nl.add(c);
  }
  last = c;
}

Время работы O (nlogn). Элементы в списке, конечно, нужны для разумной реализации equals() и hashCode().

Set<?> set = new HashSet<String>(); // Track "seen"
List<?> l = ...; // Original list
List<?> nl = new ArrayList<>(); // New list without dupes
for (Object o: l) {
  if (!set.contains(o)) {
    nl.add(o);
  }
  set.add(o);
}

Время выполнения - O (n), поскольку hashset - это постоянное время поиска. Или проще:

Set<?> set = new HashSet<String>(); // Will be collection without dupes
List<?> l = ...; // Original list
for (Object o: l) {
  set.add(o); // Rely on set semantics to remove dupes
}
List<?> nl = new ArrayList<>(set);

Конечно, объекты в списке должны реализовывать разумные equals() и hashCode().

С java 8 вы можете использовать Stream Different для решения этой проблемы.

Пример кода, как показано ниже. Надеюсь, это поможет тебе.

// input data
List<String> a = new ArrayList<>();
a.add("A");
a.add("A");
a.add("A");
a.add(null);
a.add(null);
Iterator source = a.iterator();
Iterable<String> iterable = () -> source;
// logic code
Iterator temp = StreamSupport
        .stream(iterable.spliterator(), false)
        .distinct()
        .collect(Collectors.toList()).iterator();
Iterable result = () -> temp;

// verify result
StreamSupport
        .stream(result.spliterator(), false)
        .forEach(System.out::println)

;

Другие вопросы по теме