【问题标题】:how to sort Arraylist of string having integer values in java如何在java中对具有整数值的字符串的Arraylist进行排序
【发布时间】:2015-06-26 10:50:11
【问题描述】:

我有一个由整数值组成的字符串列表。我只想按升序和降序排序。

ArrayList<String> a = new ArrayList<String>();
a.add("1435536000000");
a.add("1435622400000");

System.out.println("Before : " + a);
Collections.sort(a, new ComparatorOfNumericString());
System.out.println("After : " + a);

我的 ComparatorOfNumericString 类是 -

public class ComparatorOfNumericString implements Comparator<String> {

    @SuppressLint("NewApi")
    @Override
    public int compare(String lhs, String rhs) {
        int i1 = Integer.parseInt(lhs);
        int i2 = Integer.parseInt(rhs);
        return Integer.compare(i1, i2);
    }

}  

任何人知道如何在java中对具有整数值的字符串进行排序?

非常感谢!!提前!!

【问题讨论】:

标签: java android


【解决方案1】:

更好的方法是将整数/长整数添加到 ArrayList 中,然后使用Collections.sort(a) 方法对其进行排序。

如果您仍想使用 String,则需要进行一些修改。请在下面找到相同的代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Input implements Comparator<String>{
    public static void main(String[] args) {
        ArrayList<String> a = new ArrayList<String>();
        a.add("1435536000000");
        a.add("1435622400000");
        a.add("1");
        a.add("10");
        a.add("20");
        a.add("15");
        a.add("1435622400010");

        System.out.println("Before : " + a);
        Collections.sort(a, new Input());
        System.out.println("After : " + a);
          }

    public int compare(String lhs, String rhs) {
    long i1 = Long.parseLong(lhs);
    long i2 = Long.parseLong(rhs);
    return (int) (i1-i2);
   }

}

【讨论】:

  • @ All-我需要做的就是-我有一个由长值组成的时间戳。我只需要对这个时间戳进行排序,这样我就可以看到最近的第一个日期和最长的日期……比如 1435622400000- 是 2015 年 6 月 30 日星期二和 1435536000000 是 2015 年 6 月 29 日星期一 我想以 sch 的方式排序可以看到 2015 年 6 月 29 日和 2015 年 6 月 30 日
  • 上面的例子将帮助你解决这个问题。如果您想反向排序,只需在 compare 方法中执行 (i2-i1) 即可。
  • 不,它不适合我。但谢谢你的评论。
【解决方案2】:

尝试使用:

Collections.sort(a);

没有任何比较器。它会按字母顺序对任何String 进行排序,因此它也可以为integer String 服务。

【讨论】:

  • 这种情况下“101”会大于“1001”,所以这种排序会出错
  • @VladMatvienko 你解决了你提到的这个问题吗?
  • @TusharGogna,当然,您只需要一个自定义比较器作为第二个参数。在其中,您需要在比较它们之前将值转换为数字。这样它将按预期进行比较
  • @TusharGogna,请参阅abhijeet dhumal 答案。这正是我所说的
  • 我在比较字母数字。除了您提到的这个错误外,它工作正常。例如:ABC 3999 显示小于 ABC 999。此外,它不处理大小写。 ://
【解决方案3】:

您可以使用此方法对字符串进行排序。

Collections.sort(arraylist);// for ascending order
Collections.sort(arraylist, Collections.reverseOrder());// for descending order.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多