对数组操作前判断是否会越界:
List<String> s = new ArrayList<>(); System.out.println(Preconditions.checkElementIndex(2,s.size(),"下标长度超过了"));
是否为空
String s = null; System.out.println(Preconditions.checkNotNull(s));
判空和多个参数hashcode
String s = null; if (Objects.equal(null, s)) { System.out.println("为null"); return; } //计算多个参数的hashcode int i = Objects.hashCode("123", "222"); System.out.println(i);
Ordering<Comparable> natural = Ordering.natural(); List<LocalDateTime> list = new ArrayList<>(Arrays.asList(LocalDateTime.parse("2022-11-12T10:20:30"), LocalDateTime.parse("2021-11-12T10:20:21"), LocalDateTime.parse("2021-11-12T10:21:30"))); list.sort(natural); list.stream().forEach(e -> { System.out.println(e); });
上面的:
Ordering.natural()就是获取一个默认的排序(能够支持排序的类,都会实现比较器的方法,也就是说默认使用该类实现的比较方法)。
Ordering.natural().reverse();reverse就是相反的意思,取相反的排序规则。
就是创建了一个反序排序类,它也实现了比较方法,但是参数的比较顺序改变了。然后返回:
排序遇到null放在最后和排序遇到null放在最前:
Ordering<Comparable> natural = Ordering.natural().nullsLast();Ordering<Comparable> natural = Ordering.natural().nullsFirst();就是判断带比较的数据,如果为null,就返回相应的数字
比较器只有三种情况:
1、左边比右边大,正数。
2、一样大,零。
3、最左边比右边小,负数。
合并排序器:
这个就挺有意思的了,也是换一个类返回来,这个类里有一个方法,当比较时发生相等时,就调用便利一个集合里的比较器方法:
也就是说可以把多个判断让在这里面,前提时上一个比较方法发生了相等。
//UsetTest中默认有一个升序name的比较器 // @Override // public int compare(UserTest o1, UserTest o2) { // return o1.getName().compareTo(o2.getName()); // } Ordering<UserTest> from = Ordering.from(new UserTest()).compound(new Comparator<UserTest>() { @Override public int compare(UserTest o1, UserTest o2) { return o2.getAge() - o1.age; } }); List<UserTest> list = new ArrayList<>(Arrays.asList(new UserTest("1", 1), new UserTest("2", 2), new UserTest("1", 2))); list.sort(from); list.stream().forEach(e -> { System.out.println(e); });