我正在研究2D阵列,所以我需要整理阵列。 解释,我的数组是一个数组字符串,它在标头中包含一些双精度值,我想在标头的函数中对数组进行排序。
我想到的第一件事是获取标头并对标头进行排序,获取另一个数组中数组的所有列,并比较按每个列index [0]排序的标头的值,然后推入另一个数组。
但是,我认为有一种方法可以轻松实现,但是我不知道是否存在,我看到了可以直接在数组中排序并按此函数进行组织的可能性,但我不知道如何实现
以防万一:
Original array
String[][]myArray = {{3,Toto,30},{2,Tata,29},{1,Titi,13}};
Array expected
String[][]newArray = {{1,Titi,13},{2,Tata,29},{3,Toto,30}};
开放征求意见! 谢谢。
编辑:标题可以是Double值。
答案 0 :(得分:2)
如果我对您的理解正确,则看起来像这样:
Arrays.stream(myArray)
.sorted(Comparator.comparingDouble(x -> Double.valueOf(x[0])))
.toArray(String[][]::new);
当然,您也可以通过Arrays::sort
和Comparator
答案 1 :(得分:0)
先前的答案在我尝试时仅返回了原始数组。这是对我有用的东西:
String[][] myArray = {{"3","Toto","30"},{"2","Tata","29"},{"1","Titi","13"}};
Arrays.sort(myArray, new Comparator<String[]>() {
public int compare(String[] lhs, String[] rhs) {
try {
double lhs_value = Double.parseDouble(lhs[0]);
double rhs_value = Double.parseDouble(rhs[0]);
if (lhs_value < rhs_value) return -1;
if (lhs_value > rhs_value) return 1;
return 0; //else the two are equal
} catch (NumberFormatException e) {
//handle exception
return 0;
}
}
});
我的输出:
1 Titi 13
2 Tata 29
3 Toto 30
这里Arrays.sort
(see Javadoc)接受两个参数:要排序的数组(myArray)和Comparator
(see Javadoc),这是一个允许在两种任意类型。由于{"3", "Toto", "30"}
不是您创建的类型,而只是String[]
,因此我们将内联Comparator<String[]>
。
比较器实现一个“比较”功能,该功能接收两个元素,并返回-1、0或1来确定元素的顺序。本质上,“比较”在排序过程中被多次调用以精确确定排序顺序。这是一些伪代码:
public int compare(Object a, Object b)
if (a comes "before" b) return -1
if (a is "equal" to b) return 0
if (a comes "after" b) return 1
如果不清楚,您可以在此处了解有关Comparator界面的更多信息: https://www.geeksforgeeks.org/comparator-interface-java/
我知道我之前使用过“ before”和“ after”,这有点模糊且不严格。如果您更倾向于数学,这是对Comparator接口的一个很好的讨论: https://math.stackexchange.com/questions/1400655/java-comparator-documentation-confused-about-the-terminology-total-order