Если вы используете Eclipse Collections , вы можете использовать метод distinct()
.
ListIterable<Integer> integers = Lists.mutable.with(1, 3, 1, 2, 2, 1);
Assert.assertEquals(
Lists.mutable.with(1, 3, 2),
integers.distinct());
Преимущество использования distinct()
вместо преобразования в набор и затем обратно в список состоит в том, что distinct()
сохраняет порядок исходного списка, сохраняя первое вхождение каждого элемента. Это реализовано с использованием как Set, так и List.
MutableSet<T> seenSoFar = Sets.mutable.with();
int size = list.size();
for (int i = 0; i < size; i++)
{
T item = list.get(i);
if (seenSoFar.add(item))
{
targetCollection.add(item);
}
}
return targetCollection;
Если вы не можете преобразовать свой исходный Список в тип коллекций Eclipse, вы можете использовать ListAdapter
для получения того же API.
MutableList<Integer> distinct = ListAdapter.adapt(integers).distinct();
Примечание: я являюсь коммиттером для Eclipse Collections.