首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按索引对数组2D排序Java

按索引对数组2D排序Java
EN

Stack Overflow用户
提问于 2018-10-13 05:22:55
回答 2查看 92关注 0票数 2

我正在处理2D数组,我需要组织我的数组。说明,我的数组是一个数组字符串,它在标题中包含一些双精度值,我想在标题的函数中对该数组进行排序。

我想的第一件事是获取头部并对头部进行排序,将数组中的所有列放入另一个数组中,并将排序的头部的值与每个列索引进行比较,然后推送到另一个数组中。

然而,我认为有一种方法可以很容易地做到这一点,但我不知道是否有这种方法,我看到了直接在数组中排序并在函数中进行组织的可能性,但我不知道如何做到这一点。

以防万一:

代码语言:javascript
复制
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}};

开放提案!谢谢。

编辑:标题可以是双精度值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-13 05:53:43

如果我没理解错的话,看起来是这样的:

代码语言:javascript
复制
Arrays.stream(myArray)
      .sorted(Comparator.comparingDouble(x -> Double.valueOf(x[0])))
      .toArray(String[][]::new);  

当然,您也可以通过Arrays::sortComparator就地执行此操作

票数 2
EN

Stack Overflow用户

发布于 2018-10-13 06:30:31

当我尝试之前的答案时,它只是返回了原始数组。以下是对我有效的方法:

代码语言:javascript
复制
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;
        } 
    }
});

我的输出:

代码语言:javascript
复制
1 Titi 13 
2 Tata 29 
3 Toto 30 

在这里,Arrays.sort (see Javadoc)接受两个参数:一个要排序的数组(myArray)和一个Comparator (see Javadoc),后者是一个允许在两个任意类型之间进行比较的接口。由于{"3", "Toto", "30"}不是您创建的类型,而只是一个String[],因此我们将创建一个内联Comparator<String[]>

比较器实现了一个函数"compare“,它接受两个元素,并返回-1、0或1来确定元素的顺序。本质上,"compare“在排序过程中被多次调用,以精确地确定排序顺序。下面是一些伪代码:

代码语言:javascript
复制
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

如果还不清楚,您可以在这里了解更多关于比较器接口的信息:https://www.geeksforgeeks.org/comparator-interface-java/

我知道我之前用了“之前”和“之后”,这有点模糊和不严谨。如果您更喜欢数学,这里有一个关于比较器接口的很好的讨论:https://math.stackexchange.com/questions/1400655/java-comparator-documentation-confused-about-the-terminology-total-order

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52787162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档