尝试编写一个程序,该程序接受一组双精度数,然后根据其小数点后的十分位和百分位将这些值排序到不同的数组中。因此,对于一个数组[1.25,2.25,3.5,10.5,7.75,4.75],请将。25、。5、。75排序到单独的数组中,以便进行计算。
您使用术语"排序",但我认为您实际上是在谈论根据前2个十进制值将值分组到集合中。如果是正确的,那么你可以使用:
values.stream().collect(Collectors.groupingBy(v -> (int)(v % 1 * 100));
这将从每个分数(表示为/100 int)生成一个映射到包含该分数的值的列表。如果你特别需要数组,你可以使用.toArray()
.
我的解决方案是一个小分组算法:
public static List<List<Float>> getSortedArrays(float[] array){
List<List<Float>> result = new ArrayList<>();
HashMap<Float, Integer> createdArrays= new HashMap<>();
for (float f : array) {
float ending = f-((int)f);
if(createdArrays.containsKey(ending)){
result.get(createdArrays.get(ending)).add(f);
}else{
createdArrays.put(ending, result.size());
List<Float> newList = new ArrayList<>();
newList.add(f);
result.add(newList);
}
}
return result;
}
我基本上是循环通过浮点数组和这个技巧float ending = f-((int)f);
我只是分隔小数后的数字。然后检查是否已经创建了这个数组,如果是,就添加当前处理的浮点数,如果没有,就创建它并添加浮点数。HashMap是用来跟踪已经创建的数组的。
再次使用。toarray()如果你需要数组…