Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对集合中的子字符串进行排序?_Java_Arrays_Arraylist - Fatal编程技术网

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

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

我如何按年份排序,然后按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);
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);