java - 如何避免排序字符串数组中的重复值?

标签 java arrays sorting duplicates hashset

我发现这段代码旨在避免数字的重复值,因此我将其更改为考虑字符串元素。它成功地避免了打印时的重复名称,但它不会按字母顺序对名称进行排序。

我还希望它不会打印特定元素“空”,因为稍后将通过输入用名称进行更新。

这是基于预订系统以升序对名称进行排序,因此空元素称为“空”。
请有人帮助我。

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. 删除重复项
  2. 删除空缺
  3. 删除任何包含 null 的内容
  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

关于java - 如何避免排序字符串数组中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707113/

相关文章:

java - 使用 jOOQ 从 Postgres 获取的流不从类返回结果

Java RTF 解析器

python - 使用 numexpr 优化 numpy 中的数值运算

javascript - 创建自定义排序函数以用作脚本中的选项

c++ - 间隙插入排序实现

c++ - 一个简单的 c++ 排序程序上的 LNK 2019 和 LNK1120 错误

Java关联数组列表

java - FileReader 是否接受 Eclipse 插件项目中的相对路径?

javascript - 使用 Angular - 不显示基于其他数组项目的 Ng-Repeat 数组项目

android - ListView 不显示任何项目