【问题标题】:How to merge two string arrays with no duplicates? [duplicate]如何合并两个没有重复的字符串数组? [复制]
【发布时间】:2021-07-28 19:44:46
【问题描述】:

我能够对两个数组进行排序和合并,但我不知道如何删除重复项。有人可以帮我吗?到目前为止,这是我的代码:

public class FinalArray {
    public static void main(String[] args) {
        String[] testArray1 = {"coffee", "tea", "water"};
        String[] testArray2 = {"lemonade", "juice", "water"};
        mergeUniqueValues(testArray1, testArray2);
    }

    public static void mergeUniqueValues(String[] arr1, String[] arr2) {
        String[] arr3 = new String[arr1.length + arr2.length];

        for (int i = 0; i < arr1.length; i++) {
            arr3[i] = arr1[i];
        }
        for (int i = arr1.length, index = 0; i < arr1.length + arr2.length; i++, index++) {
            arr3[i] = arr2[index];
        }
        Arrays.sort(arr3);

        System.out.println("Your sorted array is: ");
        for (String str : arr3) {
            System.out.println(str);
        }
    }
}

【问题讨论】:

    标签: java arrays string duplicates


    【解决方案1】:

    Set 的属性:不允许重复。

    您可以简单地将数组转换为Set(以避免重复),然后将其转换回数组。

    这是一个示例代码供您参考:

    public class Main {
    
        public static void main(String[] args) {
    
            String[] testArray1 = {"coffee", "tea", "water"};
            String[] testArray2 = {"lemonade", "juice", "water"};
            mergeUniqueValues(testArray1, testArray2);
        }
    
        public static void mergeUniqueValues(String[] arr1, String[] arr2) {
            Set noDuplicateSet = new HashSet();
            noDuplicateSet.addAll(Arrays.asList(arr1));
            noDuplicateSet.addAll(Arrays.asList(arr2));
    
            String[] noDuplicateArray = new String[noDuplicateSet.size()];
            noDuplicateSet.toArray(noDuplicateArray);
    
            Arrays.sort(noDuplicateArray);
    
            System.out.println("Your sorted array is: ");
            for (String str : noDuplicateArray) {
                System.out.println(str);
            }
        }
    }
    

    输出:

    Your sorted array is: 
    coffee
    juice
    lemonade
    tea
    water
    

    【讨论】:

      【解决方案2】:

      您可以使用 Java Streams 和 distinct()

      String[] result =
        Stream.concat( // combine
          Stream.of(array1),
          Stream.of(array1))
        .distinct()    // filter duplicates
        .sorted()      // sort
        .toArray(String[]::new);
      

      【讨论】:

      • 这是一个不错的解决方案。
      【解决方案3】:

      您可以利用java.util.TreeSet 类,它是一个实现java.util.Set 的集合,由所有按给定元素的自然顺序排序的唯一值组成。在您的情况下,String 确实实现了Comparable,因此在将元素插入集合时可以自然地对其进行排序。

      这是你可以测试的代码:

      import java.util.*;
      
      public class MergeArray {
      
          public static void main(String[] args) {
      
              String[] testArray1 = { "coffee", "tea", "water" };
              String[] testArray2 = { "lemonade", "juice", "water" };
              
              mergeUniqueValues(testArray1, testArray2);
          }
      
          public static void mergeUniqueValues(String[] arr1, String[] arr2) {
              
              Set<String> mergedList = new TreeSet(Arrays.asList(arr1));
              mergedList.addAll(Arrays.asList(arr2));
              String[] arr3 = mergedList.toArray(String[]::new);
              
              System.out.println("Your sorted array is: ");
              for (String str : arr3) {
                  System.out.println(str);
              }
          }
      
      }
      

      这是输出:

      Your sorted array is: 
      coffee
      juice
      lemonade
      tea
      water
      

      【讨论】:

        【解决方案4】:

        你可以使用Java Stream

        String[] testArray1 = {"coffee", "tea", "water"};
        String[] testArray2 = {"lemonade", "juice", "water"};
        
        String[] testArray3 = Stream.of(testArray1, testArray2)
                .flatMap(Arrays::stream).distinct().sorted().toArray(String[]::new);
        
        Arrays.stream(testArray3).forEach(System.out::println);
        //coffee
        //juice
        //lemonade
        //tea
        //water
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-16
          • 2017-08-12
          • 1970-01-01
          • 2013-12-16
          • 2015-05-02
          • 1970-01-01
          相关资源
          最近更新 更多