2014-10-01 3 views
7

У меня есть 2 текстовых файла с данными. Я читаю эти файлы с BufferReader и помещаю данные одного столбца в файл в List<String>.Как получить уникальные значения в списке

У меня есть дублированные данные в каждом из них, но мне нужно иметь уникальные данные в первом List, чтобы противостоять дублированным данным во втором List.

Как я могу получить уникальные значения от List?

+0

Не добавляйте повторяющиеся значения, если List уже содержит '()' it? –

ответ

7

Преобразование ArrayList в HashSet.

List<String> listWithDuplicates; // Your list containing duplicates 
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates); 

Если по какой-то причине, вы хотите, чтобы преобразовать набор обратно в список после этого, вы можете, но, скорее всего, не будет никакой необходимости.

List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues); 
+0

Thnks много для вас ответ. –

0

Я просто понимаю, что решение может быть полезным для других лиц. сначала будет заполнен дублируемыми значениями из BufferReader.

ArrayList<String> first = new ArrayList<String>(); 

Чтобы извлечь уникальные значения я просто создать новый ArrayList как вниз:

ArrayList<String> otherList = new ArrayList<>(); 

    for(String s : first) { 
     if(!otherList.contains(s)) 
      otherList.add(s); 
    } 

Много поста в Интернете все говорить, чтобы назначить мои Список_массивы к List, Set HashTable или TreeSet. Может ли кто-нибудь объяснить разницу в теории, а во-первых - лучшее использование на практике? thnks для вашего времени ребята.

+0

Документация по API Java предоставляет подробную документацию для каждого класса и интерфейсов коллекции. Страница [Википедия в списках] (http://en.wikipedia.org/wiki/List_ (abstract_data_type)) также содержит обзор и ссылки на страницы о других типах коллекций. –

13

Это можно сделать одну на одну строку с помощью промежуточного Set:

List<String> list = new ArrayList<>(new HashSet<>(list)); 

В Java 8, используйте distinct() на поток:

List<String> list = list.stream().distinct().collect(Collectors.toList()); 

В качестве альтернативы, не используйте список в все; просто используйте Set (например, HashSet) с самого начала для коллекции, в которой вы хотите сохранить только уникальные значения.

+0

Я думаю, что вы имеете в виду: 'list.stream(). Distinct(). Collect (Collectors.toList());' – MoGa

+0

@MoGa Я был молод, глуп и влюблен. Кто может обвинить меня в такой глупости? (спасибо - скорректированный код) – Bohemian

+0

lol ваш код на самом деле указал мне в правильном направлении;) cheers – MoGa

0

В Java 8:

 // List with duplicates 
    List<String> listAll = Arrays.asList("A", "A", "B", "C", "D", "D"); 

    // filter the distinct 
    List<String> distinctList = listAll.stream() 
        .distinct() 
        .collect(Collectors.toList()); 

    System.out.println(distinctList);// prints out: [A, B, C, D] 

это будет также работать с объектами, но вы, вероятно, придется адаптировать свой метод Equals.

Смежные вопросы