首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据两个值对数组进行排序?

如何根据两个值对数组进行排序?
EN

Stack Overflow用户
提问于 2021-04-22 21:44:02
回答 3查看 58关注 0票数 0

我正在尝试使用Java对一个由整数对字符串组成的数组进行排序

输入为:

["2,0", "1,3", "2,3", "1,0", "6,4", "5,7", "10,8", "7,11", "9,11", "11,12"]

所需的输出为:

["1,0", "1,3", "2,0", "2,3", "5,7", "6,4", "7,11", "9,11", "10,8", "11,12"]

EN

回答 3

Stack Overflow用户

发布于 2021-04-22 21:47:42

使用一个比较器,它首先读取逗号之前的字符串,将其解析为一个int,然后进行比较;然后使用一个比较器,它执行相同的操作,但字符串中逗号后面的部分:

代码语言:javascript
复制
Comparator<String> pairComparator =
    Comparator.comparingInt(s -> Integer.parseInt(s.substring(0, s.indexOf(','))))
          .thenComparingInt(s -> Integer.parseInt(s.substring(s.indexOf(',') + 1)));
票数 1
EN

Stack Overflow用户

发布于 2021-04-22 22:17:21

尝尝这个。

代码语言:javascript
复制
List<String> list = List.of("2,0", "1,3", "2,3", "1,0", "6,4", "5,7", "10,8", "7,11", "9,11", "11,12");
List<String> output = list.stream()
    .map(e -> new Object() {
        int[] a = Stream.of(e.split(",")).mapToInt(Integer::parseInt).toArray();
        String origin = e;
    })
    .sorted((obj1, obj2) -> Arrays.compare(obj1.a, obj2.a))
    .map(obj -> obj.origin)
    .collect(Collectors.toList());
System.out.println(output);

输出

代码语言:javascript
复制
[1,0, 1,3, 2,0, 2,3, 5,7, 6,4, 7,11, 9,11, 10,8, 11,12]
票数 1
EN

Stack Overflow用户

发布于 2021-04-22 22:41:21

使用循环的旧方法

代码语言:javascript
复制
        String[] values = {"2,0", "1,3", "2,3", "1,0", "6,4", "5,7", "10,8", "7,11", "9,11", "11,12"};
        Integer[][] pairs = new Integer[10][2];
        String e[] = null;
        for(int i = 0; i < values.length; i++) {   // To extract the integer values
            e = values[i].split(",");
            pairs[i][0] = Integer.parseInt(e[0]);
            pairs[i][1] = Integer.parseInt(e[1]);       
         }      
        Integer temp1;
        Integer temp2;
        
        for(int i = 0; i < pairs.length; i++) {   // n^2 pass
            for( int j= 0; j < pairs.length; j ++) {
                
                if (pairs[i][0] < pairs[j][0]) {
                    
                    temp1 = pairs[j][0];
                    temp2 = pairs[j][1];
                    
                    pairs[j][0] = pairs[i][0];
                    pairs[j][1] = pairs[i][1];
                    
                    pairs[i][0] = temp1;
                    pairs[i][1] = temp2;    
                }
                else if (pairs[i][0] == pairs[j][0]) {
                    
                    if (pairs[i][1] != pairs[j][1]) {;
                        temp2 = pairs[j][1];
                        
                        pairs[j][1] = pairs[i][1];
                        
                        pairs[i][1] = temp2;
                        }
                    
                }
                
              } // inner for loop
        } // outer for loop
        
        for(int i = 0; i < pairs.length; i++) {
            System.out.println(pairs[i][0]+","+pairs[i][1]);
        }

输出

代码语言:javascript
复制
1,0
1,3
2,3
2,0
5,7
6,4
7,11
9,11
10,8
11,12
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67214499

复制
相关文章

相似问题

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