Java Collections.sort 排序发生异常时结果是?

277 阅读1分钟

抛出异常时,异常的元素会放到末尾(不再比较,不再往后按照新的属性比较。异常的元素依然存在)

package com.company;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
/**
 * @Author you guess
 * @Date 2021/1/8 11:05
 * @Version 1.0
 * @Desc
 */
 
 
class Mobile {
 
    private String length;
    private String name;
 
    public Mobile(String length, String name) {
        this.length = length;
        this.name = name;
    }
 
 
    public String getLength() {
        return length;
    }
 
    public void setLength(String length) {
        this.length = length;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "Mobile{" +
                "length=" + length +
                ", name='" + name + '\'' +
                '}';
    }
}
 
public class Main28 {
    public static void main(String[] args) {
        List<Mobile> list = new ArrayList<>();
        list.add(new Mobile("12", "xiaomi1"));
        list.add(new Mobile("13", "apple"));
        list.add(new Mobile("12", "xiaomi2"));
        list.add(new Mobile("9", "huawei"));
        list.add(new Mobile("8", "oppo"));
        list.add(new Mobile(null, "vivo2"));
        list.add(new Mobile(null, "vivo1"));
        list.add(new Mobile("", "vivo1"));
        list.add(new Mobile("", "vivo3"));
 
        Collections.sort(list, new Comparator<Mobile>() {
            @Override
            public int compare(Mobile o1, Mobile o2) {
                try {
                    int lengthSeq = 0;
                    lengthSeq = Long.valueOf(o1.getLength()).compareTo(Long.valueOf(o2.getLength()));
                    if (lengthSeq == 0) {
                        return Integer.compare(o1.getName().compareTo(o2.getName()), 0);
                    }
                    return lengthSeq;
                } catch (Exception e) {
                    e.printStackTrace();
                    System.err.println("sort err111" + "000000000000");
                }
                return 0;
            }
        });
 
        for (Mobile ele : list) {
            System.out.println(ele.toString());
        }
        //会抛出异常,但是转为Long异常的记录会放到末尾(不再比较,不再往后按照新的属性比较)
 
//        Mobile{length=8, name='oppo'}
//        Mobile{length=9, name='huawei'}
//        Mobile{length=12, name='xiaomi1'}
//        Mobile{length=12, name='xiaomi2'}
//        Mobile{length=13, name='apple'}
//        Mobile{length=null, name='vivo2'}
//        Mobile{length=null, name='vivo1'}
//        Mobile{length=, name='vivo1'}
//        Mobile{length=, name='vivo3'}
 
 
    }//main
}

注意看输出的结果!!

................
java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Long.parseLong(Long.java:601)
	at java.lang.Long.valueOf(Long.java:803)
	at com.company.Main28$1.compare(Main28.java:70)
	at com.company.Main28$1.compare(Main28.java:65)
	at java.util.TimSort.binarySort(TimSort.java:296)
	at java.util.TimSort.sort(TimSort.java:221)
	at java.util.Arrays.sort(Arrays.java:1512)
	at java.util.ArrayList.sort(ArrayList.java:1462)
	at java.util.Collections.sort(Collections.java:177)
	at com.company.Main28.main(Main28.java:65)
sort err111000000000000
java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Long.parseLong(Long.java:601)
	at java.lang.Long.valueOf(Long.java:803)
	at com.company.Main28$1.compare(Main28.java:70)
	at com.company.Main28$1.compare(Main28.java:65)
	at java.util.TimSort.binarySort(TimSort.java:296)
	at java.util.TimSort.sort(TimSort.java:221)
	at java.util.Arrays.sort(Arrays.java:1512)
	at java.util.ArrayList.sort(ArrayList.java:1462)
	at java.util.Collections.sort(Collections.java:177)
	at com.company.Main28.main(Main28.java:65)
sort err111000000000000
Mobile{length=8, name='oppo'}
Mobile{length=9, name='huawei'}
Mobile{length=12, name='xiaomi1'}
Mobile{length=12, name='xiaomi2'}
Mobile{length=13, name='apple'}
Mobile{length=null, name='vivo2'}
Mobile{length=null, name='vivo1'}
Mobile{length=, name='vivo1'}
Mobile{length=, name='vivo3'}

jdk1.8