成对的值和排序使用第一个java

时间:2017-11-11 11:34:33

标签: java sorting

我有一个包含值对的大文件,我想根据第一个值对它们进行排序。例如

  1,2
  3,4
  1,3
  5,2
  1,5

我想根据第一个值对它们进行排序。我该怎么做?

2 个答案:

答案 0 :(得分:1)

假设您已经完成了所有样板代码,用于读取文件并将其存储到某种类型的集合中。然后,您可以根据每个字符串的第一个值对您的集合进行排序。

TreeSet<String> resultSet = myCollection.parallelStream().sorted(
            Comparator.comparingInt((String e) -> Integer.parseInt(e.substring(0,e.indexOf(",")))))
            .collect(Collectors.toCollection(TreeSet::new));

note - 确保在将文件累积到临时集合之前读取文件时修剪了每个字符串中的所有空格,或者如果需要,可以在e.substring之前修剪它打电话给e.trim().substring(0,e.indexOf(",")))

修改

上述解决方案假设myCollection中的每个字符串在分隔符,之前或之后可能有超过1位数。但是,假设在,分隔符之前和之后始终有1位数字,则无需对任何数据进行排序,而是在读取文件而不是TreeSet时使用HashSet作为累加器集合。它会在您将字符串对象添加到集合时对数据进行排序。

答案 1 :(得分:0)

嗯,我不太了解,但我建议使用while / for循环来读取每对(num1,num2)和if (num1>num2){num1 now has the value of num2, and vice versa}。这将订购这对。现在,我建议另一个for / while循环遍历每对的第一个数字,并使用一个排序算法,例如:

for(int i = 0; i<= numberOfPairs; i++){
    int number = firstOfPair[i];
    for(int j = i; j<=(numberOfPairs-i; j++){
        if(firstOfPair[j] > number){
           auciliarVariable = firstOfPair[j];
           firstOfPair[j] = firstOfPair[i];
           firstOfPair[i] = auxiliarVariable;
         }
    }
}