Как избежать дублирования значений в массиве отсортированных строк? - PullRequest
0 голосов
/ 16 марта 2020

Я нашел этот код, который должен был избежать дублирования значений для чисел, поэтому я изменил его для учета элементов String. Он успешно избегает дублирования имен при печати, но он не сортирует имена в алфавитном порядке c.

Я также надеюсь, что он не печатает указанный элемент c "вакантный", потому что он будет позже обновляться с именем через вход.

Это основано на системе бронирования для сортировки имен в порядке возрастания, поэтому пустые элементы называются "пустыми".
Пожалуйста, кто-нибудь может мне помочь.

String[] a ={"Anne","Anne","Afrid","vacant","vacant","Sammy","Dora","vacant"};
HashSet<String> nameSet = new HashSet<>();
for (int i = 0; i < a.length;i++){
    nameSet.add(a[i]);
}
for (String name: nameSet) {
    System.out.println(name+" ");
}

1 Ответ

0 голосов
/ 16 марта 2020

Вот простой код для выполнения следующих действий:

  1. Удаленные дубликаты
  2. Удаленные вакантные
  3. Удаляет все, что имеет ноль
  4. Сортировки регистр игнорируется
  5. печатает их
    public static void main(String argv[]) {
        //Input
        String[] a = { "Anne", "Anne", "Afrid", "vacant", "vacant", "Sammy", "Dora", "vacant" };
        List<String> list = Stream.of(a) //Convert to Stream
                .filter(Objects::nonNull) //Remove Null values
                .sorted(new IgnoreCaseStringSorter()) //Sort ignore case
                .distinct() //Remove duplicates
                .filter(name -> !name.equalsIgnoreCase("vacant")) //Remove "vacant"
                .collect(Collectors.toList()); //Convert to list
        System.out.println("Names: ");
        list.stream().forEach(System.out::println);//Print the list

    }
    static class IgnoreCaseStringSorter implements Comparator<String> {
        // Used for sorting in ascending order
        public int compare(String a, String b) {
            return a.compareToIgnoreCase(b);
        }
    }

Вывод:

Names: 
Afrid
Anne
Dora
Sammy

...