Как удалить повторяющиеся элементы из массива, при этом сохранить его последовательность в Java?
Дан массив строк. Необходимо удалить из него все дубли, а оставшиеся строки объединить в одну в порядке следования в массиве.
Т.е. если есть массив: [ "aa", "bb", "cc", "aa", "bb", "dd"]
то в результате получится: [ "aa", "bb", "cc", "dd"]
Ответы (2 шт):
Автор решения: Nowhere Man
→ Ссылка
Данная задача состоит в том, чтобы преобразовать входной массив строк в одну строку, в которой не будет дубликатов, что достаточно просто реализовать при помощи 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]
Автор решения: siarhei987
→ Ссылка
LinkedHashSet - для удаления дубликатов с сохранением порядка добавления.
StringJoiner - для формирования итоговой строки.
String oneStringWithoutDuplicates(String[] strings) {
var joiner = new StringJoiner(",", "[", "]");
new LinkedHashSet<>(List.of(strings))
.forEach(s -> joiner.add("\"" + s + "\""));
return joiner.toString();
}