Java 如何对集合中的子字符串进行排序?
我如何按年份排序,然后按bc排序Java 如何对集合中的子字符串进行排序?,java,arrays,arraylist,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.a
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);
List spzn=newarraylist;
对于(最终CcaesItem项:items){//items是列表
Long bc=item.getBcItem();
长年份=item.getYear();
字符串类型=item.getType();
添加(类型+“”+bc+“/”+年份);
}
收集、分类(spzn);
我本来打算使用子字符串,但是collection.sort不能与子字符串一起使用。在创建自定义的
字符串之前,对项进行排序
List<String> spzn = items.stream()
.sorted(Comparator.comparing(CcaesItem::getYear).thenComparing(CcaesItem::getBcItem))
.map(vec -> vec.getType() + " " + vec.getBcItem() + "/" + vec.getYear())
.collect(Collectors.toList());
List spzn=items.stream()
.sorted(Comparator.comparing(CcaesItem::getYear)。然后比较(CcaesItem::getBcItem))
.map(vec->vec.getType()+“”+vec.getBcItem()+“/”+vec.getYear())
.collect(Collectors.toList());
您可以先对列表进行排序:
List<String> result =
items.stream()
.sorted(Comparator.comparingLong(CcaesItem:: getYear).thenComparingLong(getBcItem))
.map(c -> c.getType() + " " + c.getBcItem() + "/" + c.getYear())
.collect(toList());
列表结果=
items.stream()
.sorted(Comparator.comparingLong(CcaesItem::getYear)。然后是comparingLong(getBcItem))
.map(c->c.getType()+“”+c.getBcItem()+“/”+c.getYear())
.collect(toList());
这是学生拥有卷号、姓名和地址的示例。第一个没有排序数据,第二个有卷号排序数据
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;
}
}
ArrayList ar=new ArrayList();
ar.add(新学生(111,“bbbb”,“伦敦”);
ar.add(新学生(131,“aaaa”,“纽约”);
ar.add(新学生(121,“中交”、“斋浦尔”);
System.out.println(“未排序”);
对于(int i=0;i集合。sort
可以获取比较器的实例作为第二个参数。在比较器中可以放置任何代码来比较两个列表项
例如,将按year
和getBcItem
对spzn
进行排序:
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;
}
});
Collections.sort(spzn,新的Comparator(){
@凌驾
公共整数比较(CcaesItem o1、CcaesItem o2){
如果(o1.getYear()>o2.getYear()){
返回1;
}else if(o1.getYear()o2.getBcItem()){
返回1;
}else if(o1.getBcItem()
另外,不要忘记在Comparator
中进行空值检查,因为列表可能包含空值排序项目
或spzn
?为了清晰起见,请更改变量名称,这样很难读取代码,是不是项目的vec键入错误?如果不作进一步解释,乍一看,这看起来像是一个不相关的代码转储。请详细解释发生了什么。这是一个学生有卷号、姓名和地址的示例。第一个没有排序数据,第二个有卷号排序数据。请将详细解释放在答案中,而不是注释部分。比较器定义可以通过java.util.comparator.comparating简化(CcaesItem::getYear)。然后进行比较(CcaesItem::getDcItem);