按索引Java

时间:2018-10-12 21:22:55

标签: java arrays sorting 2d

我正在研究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值。

2 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,则看起来像这样:

Arrays.stream(myArray)
      .sorted(Comparator.comparingDouble(x -> Double.valueOf(x[0])))
      .toArray(String[][]::new);  

当然,您也可以通过Arrays::sortComparator

答案 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