guava的使用

对数组操作前判断是否会越界:

java 复制代码
        List<String> s = new ArrayList<>();
        System.out.println(Preconditions.checkElementIndex(2,s.size(),"下标长度超过了"));

是否为空

java 复制代码
        String s = null;
        System.out.println(Preconditions.checkNotNull(s));

判空和多个参数hashcode

java 复制代码
        String s = null;
        if (Objects.equal(null, s)) {
            System.out.println("为null");
            return;
        }
        //计算多个参数的hashcode
        int i = Objects.hashCode("123", "222");
        System.out.println(i);
java 复制代码
      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、最左边比右边小,负数。

合并排序器:

这个就挺有意思的了,也是换一个类返回来,这个类里有一个方法,当比较时发生相等时,就调用便利一个集合里的比较器方法:

也就是说可以把多个判断让在这里面,前提时上一个比较方法发生了相等。

java 复制代码
//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);
        });
相关推荐
BD_Marathon3 分钟前
Vue3_关于CSS样式的导入方式
前端·css
冷雨夜中漫步7 分钟前
Java类加载机制——双亲委派与自定义类加载器
java·开发语言·python
苹果电脑的鑫鑫11 分钟前
vue和react缩进规则的配置项如何配置
前端·vue.js·react.js
BD_Marathon13 分钟前
Vue3_工程文件之间的关系
前端·javascript·vue.js
weibkreuz15 分钟前
模块与组件、模块化与组件化的理解@3
开发语言·前端·javascript
SadSunset17 分钟前
(29)阶段性个人总结
java
拾忆,想起19 分钟前
单例模式深度解析:如何确保一个类只有一个实例
前端·javascript·python·微服务·单例模式·性能优化·dubbo
RealizeInnerSelf丶25 分钟前
Web 网页如何唤起本地 Windows 应用并传递参数(含 Electron 自动注册 + 手动配置指南)
前端·windows
IT_陈寒33 分钟前
Redis 性能优化实战:5个被低估的配置项让我节省了40%内存成本
前端·人工智能·后端
chilavert31834 分钟前
技术演进中的开发沉思-261 Ajax:动画优化
前端·javascript·ajax