Как удалить повторяющиеся элементы из массива, при этом сохранить его последовательность в Java?

Рейтинг: 0Ответов: 2Опубликовано: 29.03.2023

Дан массив строк. Необходимо удалить из него все дубли, а оставшиеся строки объединить в одну в порядке следования в массиве.

Т.е. если есть массив: [ "aa", "bb", "cc", "aa", "bb", "dd"]

то в результате получится: [ "aa", "bb", "cc", "dd"]

Ответы

▲ 1Принят

Данная задача состоит в том, чтобы преобразовать входной массив строк в одну строку, в которой не будет дубликатов, что достаточно просто реализовать при помощи Stream API, в частности Stream::distinct для фильтрации дубликатов и Collectors.joining для получения строки результата:

public static String keepDistinct(String ... arr) {
    return Arrays.stream(arr)
        .distinct()
        .collect(Collectors.joining(", ", "[", "]")); // в виде "[a, b, c]"
//      .collect(Collectors.joining(", ")); // с разделителем ", " - в виде "a, b"
//      .collect(Collectors.joining()); // без разделителя, в виде "ab"
}
System.out.println(keepDistinct("aa", "bb", "cc", "aa", "bb", "dd"));
// -> [aa, bb, cc, dd]
▲ 0

LinkedHashSet - для удаления дубликатов с сохранением порядка добавления. StringJoiner - для формирования итоговой строки.

String oneStringWithoutDuplicates(String[] strings) {

    var joiner = new StringJoiner(",", "[", "]");
    new LinkedHashSet<>(List.of(strings))
            .forEach(s -> joiner.add("\"" + s + "\""));
            
    return joiner.toString();
    
}