从Java中的double数组中删除重复的值?
我有一个双阵列:从Java中的double数组中删除重复的值?
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;
}
和我收到以下错误:
源[0]类型的双[]不能被存储在类型的目标阵列java.lang.Double中[]
首先你需要从你的数组中创建一个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[] myArrayOdPrimitives = ...
Double[] myArray = ArrayUtils.toObject(myArrayOdPrimitives);
Set<Double> myset = new HashSet<Double>(Arrays.asList(myArray));
double[] noDuplicates = myset.toArray(new double[myset.size()]);
'新的HashSet
@Pshemo右...我用String开始。我发布了它。然后我看到问卷要求Double,我没有重新测试就更改了它。 –
设置和HashSet的类不具有原始类型的工作像double
或int
,你必须做这样的事情:Set<Double> mySet = new HashSet<Double>();
然后添加这样的内容:mySet.add(new Double(12.5));
如果您构建与阵列一套集将excluse复制的我为TEMS你
例子:
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]
至极为您
所需的输出试试这个: 不要忘记使用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]
当你做Set<double[]> myset = new HashSet<double[]>(Arrays.asList(signs));
,实际上创建double
的Set
一个数组,你真正想要一套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中的约定是以小写字符开始方法名称。
我试过了。我仍然得到一个错误,但它有点不同...它说:java.lang.Object []不能转换为java.lang.Double [] 在org.opencv.samples.tutorial1.LinesProcess.duplicates – user3855955
@ user3855955这很奇怪,我没有得到这个代码的任何错误。但是如果它不适合你,用'Double [] signfinal = myset.toArray(new Double [0])替换Double [] signfinal =(Double [])myset.toArray();' –
在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);
正是你尝试过什么?你能提供一些代码吗? – Leon
你需要更精确。 “删除”是什么意思?后期的输入例子,预期的输出和你到目前为止尝试过的代码。 – Pshemo
“我无法让它工作”是没有足够的信息让任何人知道你的代码有什么问题。你需要[编辑]你的问题,以包含代码和你得到的任何编译/运行时错误。 – azurefrog