我如何按年份然后按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不适用于子字符串。
答案 0 :(得分:2)
Collections.sort
可以获取Comparator
的实例作为第二个参数。在Comparator
中,您可以输入任何代码来比较两个列表中的项目。
例如,将spzn
按year
和getBcItem
排序:
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;
}
}