如何对集合中的子字符串进行排序?

时间:2018-07-13 09:13:09

标签: java arrays arraylist

我如何按年份然后按BC排序?

List<String> spzn = new ArrayList<String>;

for(final CcaesItem item : items) { //Items is List<CcaesItem>
    Long bc = item.getBcItem();
    Long year = item.getYear();
    String type = item.getType();
    spzn.add(type + " " + bc + "/" + year);  
}
Collection.sort(spzn);

我有主意使用子字符串,但是collection.sort不适用于子字符串。

4 个答案:

答案 0 :(得分:2)

Collections.sort可以获取Comparator的实例作为第二个参数。在Comparator中,您可以输入任何代码来比较两个列表中的项目。

例如,将spznyeargetBcItem排序:

    Collections.sort(spzn, new Comparator() {
        @Override
        public int compare(CcaesItem  o1, CcaesItem  o2) {
            if (o1.getYear() > o2.getYear()) {
                return 1;
            } else if (o1.getYear() < o2.getYear()) {
                return -1;
            } else {
                if (o1.getBcItem() > o2.getBcItem()) {
                    return 1;
                } else if (o1.getBcItem() < o2.getBcItem()) {
                    return -1;
                }
            }

            return 0;
        }
    });

也不要忘记Comparator中的空检查,因为列表可以包含空值

答案 1 :(得分:1)

在创建自定义items之前对Strings集合进行排序。

List<String> spzn = items.stream()
  .sorted(Comparator.comparing(CcaesItem::getYear).thenComparing(CcaesItem::getBcItem))
  .map(vec -> vec.getType() + " " + vec.getBcItem() + "/" + vec.getYear())
  .collect(Collectors.toList());

答案 2 :(得分:0)

您可以先对列表进行排序:

List<String> result = 
     items.stream()
     .sorted(Comparator.comparingLong(CcaesItem:: getYear).thenComparingLong(getBcItem))
     .map(c -> c.getType() + " " + c.getBcItem() + "/" + c.getYear())
     .collect(toList());

答案 3 :(得分:0)

这是具有卷号,姓名和地址的学生的示例。第一个没有排序数据,第二个没有滚动编号排序数据。

ArrayList<Student> ar = new ArrayList<Student>();
ar.add(new Student(111, "bbbb", "london"));
ar.add(new Student(131, "aaaa", "nyc"));
ar.add(new Student(121, "cccc", "jaipur"));

System.out.println("Unsorted");
for (int i=0; i<ar.size(); i++)
    System.out.println(ar.get(i));

Collections.sort(ar, new Sortbyroll());

System.out.println("\nSorted by rollno");
for (int i=0; i<ar.size(); i++)
    System.out.println(ar.get(i));

class Sortbyroll implements Comparator<Student>
{
    // Used for sorting in ascending order of
    // roll number
    public int compare(Student a, Student b)
    {
        return a.rollno - b.rollno;
    }
}