我有一个双数组:
double []signs = new double [sizelines];
我需要删除所有重复的值,或者只是提取值而不重复。
我尝试使用Set
和HashSet
,但我无法使用双精度版。我使用了以下代码:
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类型的目标数组中[]
答案 0 :(得分:1)
Set和HashSet类不适用于double
或int
等基本类型,您必须执行以下操作: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
代替原始类型的double
或int
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));
后,您实际创建了Set
个double
数组,其中您实际需要一组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);