从Java中的double数组中删除重复的值?

时间:2016-06-13 16:16:58

标签: java android duplicates double

我有一个双数组:

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 []类型的source [0]无法存储在java.lang.Double类型的目标数组中[]

6 个答案:

答案 0 :(得分:1)

Set和HashSet类不适用于doubleint等基本类型,您必须执行以下操作:Set<Double> mySet = new HashSet<Double>();然后添加如下元素:{{ 1}}

答案 1 :(得分:0)

首先,您需要从数组中创建一个Set。您只需要定义myArray类型的Double[],就可以在评论中没有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()]);

答案 2 :(得分:0)

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

实施例

  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]

这是您想要的输出

答案 3 :(得分:0)

试试这个: 别忘了使用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]

答案 4 :(得分:0)

执行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;
}

P.S:Java中的约定是用小写字符启动方法名称。

答案 5 :(得分:0)

在Java 8中,您只需要

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);