1) Используйте служебный метод distinctbykey
в filter
, если вы хотите получить уникальный результат для некоторого поля.
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> map = new ConcurrentHashMap<>();
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
ArrayList<X> items = new ArrayList();
items = items
.stream()
.filter( distinctByKey(x -> x.uniqueFiled()) ) // pass field of X object on basis of you want unique objects
.collect(Collectors.toList());
2) Есть еще один способ избежать дублирования в списке.
Override
equals
и hash
функция класса X
, в которой вы должны сравнить поле Brand
, а затем использовать отдельный метод stream
, он вернет список различных объектов, вызвав ваши equals
и hash
функция.
ArrayList<X> items = new ArrayList();
items = items
.stream()
.distinct()
.collect(Collectors.toList());
3) Если вы реализуете функции equals
и hash
. затем просто создайте Set
из List
. Set
имеет уникальные элементы, и десять снова создают List
из этого Set
.
ArrayList<X> items = new ArrayList();
Set<X> set = new HashSet<X>(items); // Now set has unique elements
items = set.stream().collect(Collectors.toList()); // list have unique elemets too