有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓是否从Java中的双数组中删除重复值?

我有一个双数组:

double []signs = new double [sizelines];

我需要删除所有重复的值,或者只提取不重复的值

我试图使用SetHashSet,但我无法使用双精度。我使用了以下代码:

  Double[] Duplicates(double[] signs) {

       Set<double[]> myset = new HashSet<double[]>(Arrays.asList(signs));
        Double[] signsfinal = myset.toArray(new Double[myset.size()]);

       return signsfinal;
    }

我收到了以下错误:

double[]类型的源[0]无法存储在java类型的目标数组中。lang.Double[]


共 (6) 个答案

  1. # 1 楼答案

    在Java8中,您只需要

    double[] values = {1., 2., 1., 3.};
    double[] uniques = DoubleStream.of(values).distinct().toArray();
    

    类似于Double[]

    Double[] values = {1., 2., 1., 3.};
    Double[] uniques = Stream.of(values).distinct().toArray(Double[]::new);
    
  2. # 2 楼答案

    首先,需要从数组中创建一个集合。只需定义类型为Double[]myArray,就不会出现Pshemo在注释中提到的错误

    Double[] myArray = ...   // Of type Double[]
    Set<Double> myset = new HashSet<Double>(Arrays.asList(myArray));
    

    然后将其转换回数组

    double[] noDuplicates = myset.toArray(new double[myset.size()]);
    

    第一步是删除重复项。第二步将其转换回数组


    如果myArray是double(基元类型)数组,则需要额外的步骤将其转换为等效的包装器:

    double[] myArrayOdPrimitives = ...
    Double[] myArray = ArrayUtils.toObject(myArrayOdPrimitives);
    Set<Double> myset = new HashSet<Double>(Arrays.asList(myArray));
    double[] noDuplicates = myset.toArray(new double[myset.size()]);
    
  3. # 3 楼答案

    如果从数组中构造一个集合,该集合将为您排除重复的项

    例如:

      public static void main(String[] args) {
        Double[] foo = { 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 2.1, 3.1, 4.1 };
        Set<Double> fSet = new HashSet<>(Arrays.asList(foo));
        System.out.println(fSet);
        }
    

    这会打印出来

    [3.1, 4.1, 1.1, 2.1]

    这是你想要的输出

  4. # 4 楼答案

    试试这个: 不要忘记使用Double而不是doubleint这是基本类型

     Double []signs = {83.4d,34.03d,4.301d,4.01d,34.03d,6.7d,4.01d,85d,83.4d};
            Set<Double> newSings = Stream.of(signs)
                                  .collect(Collectors.toCollection(HashSet::new));
    
            System.out.println(newSings);
    

    作为方法:

    Double[] Duplicates(double[] signs) {
    
       Set<Double> signsfinal = Stream.of(signs)
                                  .collect(Collectors.toCollection(HashSet::new));;
    
       return signsfinal;
    }
    

    输出:

    [4.01, 85.0, 4.301, 6.7, 83.4, 34.03]

  5. # 5 楼答案

    Set和HashSet类不能与doubleint这样的基元类型一起工作,您必须这样做:Set<Double> mySet = new HashSet<Double>();然后添加如下元素:mySet.add(new Double(12.5));

  6. # 6 楼答案

    当你做Set<double[]> myset = new HashSet<double[]>(Arrays.asList(signs));时,你实际上创建了一个Setdouble数组,你实际上想要一组Double。试试看:

    Double[] duplicates(double[] signs)
    {
        Set<Double> myset = new HashSet<Double>();
        for (double d : signs)
        {
            myset.add(Double.valueOf(d));
        }
        Double[] signsfinal = (Double[]) myset.toArray();
    
        return signsfinal;
    }
    

    注:Java中的惯例是以小写字符开头方法名