Guava学习(五):ComparisonChain(比较链)

guava学习(一)ComparisonChain 源码分析 1. ComparisonChain 使用 2. ComparisonChain 源码分析ComparisonChain 使用我有一个产品的list,想对这个list先按产品生效时间排序,如果生效时间一样再按失效时间排序,代码如下:package collection;import java.util.ArrayList; import java.util.Collections; impor 阅读详情

Guava学习(五):ComparisonChain(比较链)

  主要作用是帮助我们实现对象的比较(如果对象有多个字段,我们希望比较的时候是根据多个字段来比较的),没用这个之前我们通常这样写:

 class Person implements Comparable {
     private String lastName;
     private String firstName;
     private int zipCode;
     public int compareTo(Person other) {
         int cmp = lastName.compareTo(other.lastName);
         if (cmp != 0) {
             return cmp;
         }
         cmp = firstName.compareTo(other.firstName);
         if (cmp != 0) {
             return cmp;
         }
         return Integer.compare(zipCode, other.zipCode);
     }
 }

  上面的代码太琐碎,不够优雅,使用ComparisonChain后就能帮助我们解决这个痛点了。话不多说,上代码。

Person类

package com.bluedragon.guavalearning.comparisonchain;

import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;

/**
 * @author CodeRush
 * @date 2019/7/27 23:58
 */
public class Person implements Comparable<Person> {

    private String name;
    private Integer age;
    private Gender gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Gender getGender() {
        return gender;
    }

    public void setGender(Gender gender) {
        this.gender = gender;
    }

    @Override
    public int compareTo(Person that) {
        //ComparisonChain执行一种懒比较: 它执行比较操作直至发现非零的结果, 在那之后的比较输入将被忽略,相对于下面的比较简单明了多了
        return ComparisonChain.start()
                .compare(this.name, that.name, Ordering.natural().nullsFirst())
                .compare(this.age, that.age)
                .compare(this.gender, that.gender)
                .result();
    }

//    class Person implements Comparable {
//        private String lastName;
//        private String firstName;
//        private int zipCode;
//        public int compareTo(Person other) {
//            int cmp = lastName.compareTo(other.lastName);
//            if (cmp != 0) {
//                return cmp;
//            }
//            cmp = firstName.compareTo(other.firstName);
//            if (cmp != 0) {
//                return cmp;
//            }
//            return Integer.compare(zipCode, other.zipCode);
//        }
//    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }

    /**
     * 性别枚举
     */
    public enum Gender {
        MAN,
        WOMAN
    }
}

测试类

package com.bluedragon.guavalearning.comparisonchain;

import com.google.common.collect.Lists;

import java.util.ArrayList;

/**
 * @author CodeRush
 * @date 2019/7/27 23:57
 */
public class ComparisonChainTest {

    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setName("zs");
        p1.setAge(18);
        p1.setGender(Person.Gender.WOMAN);
        Person p2 = new Person();
        p2.setName("zs");
        p2.setAge(18);
        p2.setGender(Person.Gender.MAN);
        Person p3 = new Person();
        p3.setAge(18);
        p3.setGender(Person.Gender.MAN);
        Person p4 = new Person();
        p4.setName("zs");
        p4.setAge(20);
        p4.setGender(Person.Gender.MAN);

        ArrayList<Person> people = Lists.newArrayList(p1, p2, p3, p4);
        //使用ComparisonChain实现的compareTo方法排序集合
        people.sort(Person::compareTo);
        people.forEach(System.out::println);
    }
}

Guava 系列 - 比较器 文章目录Guava 系列 - 比较器1、自我实现的比较器例子2、使用guava比较器 Guava 系列 - 比较器 1、自我实现的比较器例子 class Person implements Comparable&lt;Person&gt; { private String lastName; private String firstName; private int zipCode;... 阅读详情

相关推荐

基于R语言 meta/metafor 包进行荟萃分析(一)

在此部分中,使用连续结果详细描述了通用逆方差方法及其在meta分析中的应用,还介绍了固定效应法和随机效应法。我们已经展示了如何分别将典型数据与metacont和metagen函数一起使用,以及如何print和绘制森林图。我们还讨论了估计研究间方差的各种方法,并将Hartung-Knapp平差描述为经典随机效应方法的替代方法。此外,我们还说明了byvar选项的使用,这使得亚组分析更加简单。关于亚组分析的更多细节见后续章节。

Dunaichuanyi的博客 1万+

ComparisonChain用法

有一个Foo类:class Foo{ int a = 0; String b =""; Foo(int a, String b){ this.a = a; this.b = b; } @Override public String toString() { return "Foo [a=" + a + ", b=" + b + "]"; } }那么如何为一个L

卢声远 Shengyuan Lu的专栏 4323

3D Slicer + MONAI Bundle实战:如何用Wholebrainseg模型快速分割133个脑区(附避坑指南)

本文详细介绍了如何利用MONAI Model Zoo中的Wholebrainseg模型,在3D Slicer环境中高效分割133个脑区。文章重点提供了数据预处理、GPU推理加速及结果精修等实战技巧与避坑指南,旨在帮助医学影像研究者和开发者提升全脑分割的精度与效率。

310

六、guava ComparisonChain比较链

【代码】guava ComparisonChain比较链。

weixin_43476824的博客 275

查看电脑mac地址+主机名+用户名并导出

张三:李四,应公司要求,今天下班前必须将这张表格里面用户电脑的mac地址统计出来!李四:我该怎么办呢?一个一个查看,太没有效率了吧!对了,我可以做一个bat脚本啊!

拥抱着青春 1970

别再只用GWR了!用Python的mgtwr包搞定时空地理加权回归(GTWR)实战

本文详细介绍了如何使用Python的mgtwr包进行时空地理加权回归(GTWR)实战,突破传统GWR模型的局限。通过核心差异解析、实战全流程演示和进阶技巧,帮助读者掌握GTWR在房价波动、污染物扩散等时空数据分析中的应用,提升模型预测精度。

weixin_30899023的博客 341

ComparisonChain

转载:https://my.oschina.net/realfighter/blog/349824 在日常的工作中,我们经常需要对两个对象进行比较,以找出其中的异同, Java中提供了compare/compareTo,我们需要实现一个比较器[Comparator],或者直接实现Comparable接口,不过当 对象的属性很多的时候,我们需要写大量的if else代码,代码不够优雅,Guava为我...

中国华的博客 242

D2D与C2C高速互联技术对比:从封装到性能的全面解析

本文全面解析了Die-to-Die(D2D)与Chip-to-Chip(C2C)高速互联技术的差异,从封装形式、传输距离到性能指标进行深度对比。D2D技术在带宽、延迟和能效方面具有显著优势,适用于高性能计算和AI加速;而C2C技术则更适合车载电子系统等长距离传输场景。文章还探讨了UCIe标准化趋势,并提供了技术选型的实用建议。

weixin_29197051的博客 551

【Java】guava(六)ComparisonChain使用

在重写对象的compareTo方法时,如果对象有多个属性,在比较时往往会形成一个层级if,即高优先级属性相同时,再比较次优先级。guava的ComparisonChain工具提供了解决上述对象比较的链式调用方法,使用起来也很方便; private int grade; private String name; public Product(int grade, St...

u010900754的专栏 770

福建公共资源交易平台 portal-sign与响应Data解密逆向实录

本文分析了福建公共资源交易电子公共服务平台的接口加密机制。通过抓包和代码分析,发现请求头中的portal-sign由MD5算法生成,包含固定秘钥和排序后的参数拼接。响应数据采用AES-256-CBC加密,需使用特定Key和IV解密。文章详细介绍了签名生成规则、参数处理流程及加密常量定位方法,为接口对接提供了技术参考。整个过程展示了如何通过逆向工程还原前端加密逻辑,最终实现脱离浏览器环境的纯协议调用。

自成背后的博客 1157

手把手实现STM32+ESP8266+原子云服务器+手机APP应用——第一节-ATK-ESP8266 WIFI模块通过USB-TTL实现连接原子云服务器与手机APP互相通信

本节实现ATK-ESP8266 WIFI模块通过USB-TTL实现连接原子云服务器与手机APP通信。具体来说,本节使用串口CH340(USB-TTL)连接正点原子ATK-ESP8266 WIFI模块,通过AT命令实现连接原子云服务器与手机APP互相通信,实现硬件设备(WIFI模块)与云服务器和手机APP的互相通信。后面章节不用串口CH340(USB-TTL),通过编写单片机程序实现数据远程互相通信,并介绍手机APP的程序设计。单片机任意款即可,STM32F1系列,F4系列,H系列等都可以。本系列为(手把手实

嵌入式阿齐Archie 8419

Guava Objects、MoreObjects、ComparisonChain

IDEA可以直接生成简单的toString、hashCode以及equals方法,但有的时候是不够的。 Commonclipse,生成hashcode、equals方法的插件。 Guava对toStirng、hashCode、equals方法进行了支持,使得自定义变得更简单。 Objects Guava中的Objects类可以进行equals、hashCode方法的自定义。 package com...

Xucc_x的博客 556

RT-DETR-R18 的轻量化 Trick:剪枝与量化在模型中的应用

RT-DETR-R18轻量化技术通过结构化剪枝、混合精度量化和知识蒸馏的组合优化,实现了显著模型压缩效果。摘要如下: RT-DETR-R18模型通过创新轻量化技术组合,在保持46.2% mAP精度的前提下,将模型大小压缩至2.1MB(压缩率78%),计算量降至3.2 GFLOPs(减少78.2%),实现移动端28ms实时推理(加速37.8%)。核心技术包括:1)渐进式结构化剪枝系统,通过L1范数重要性评估和动态剪枝调度;2)混合精度量化策略,对关键层保留FP16精度;3)教师-学生知识蒸馏框架保持模型表达能

走向CTO的路上... 1188

Guava源码阅读——Collect包.ComparisonChain类

ComparisonChain 使用 有一个产品的list,想对这个list先按产品生效时间排序,如果生效时间一样再按失效时间排序,代码如下: package collection; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util...

MOON5555的博客 583

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

记录下Guava的ComparisonChain源码

abstract class ComparisonChain { private ComparisonChain() { } /** * Begins a new chained comparison statement. See example in the class * documentation. */ public static ComparisonChain sta

ohayoyi的专栏 644

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[Java123] 开源工具guava比较器链ComparisonChain (附加比较null空值的实现方法)

工作中遇到的很多Common的问题,可以优先用短时间调研查找下功能强大高效使用广泛的开源库,退而再考虑自己闷头开发一个适用的工具。 https://baijiahao.baidu.com/s?id=1633041810241009976&wfr=spider&for=pc 近期项目测试需要开发很多对象比较的操作,看到前面童鞋使用了guava的Comparison...

weixin_30847939的博客 447

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Guava库学习:Guava中ComparisonChain类的学习和使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34292402的博客 193

Guava/google学习

google提供的guava编程方式,许多东西值得借鉴和使用

creaylei的小花园 346

guava比较器链ComparisonChain的使用

为什么80%的码农都做不了架构师?>>> ...

weixin_34148456的博客 338

GUAVA Object 介绍

Object 如果equals()判断两个对象相等,那么它们的hashCode()方法应该返回同样的值。 两个对象用equals()方法比较返回false,它们的hashCode可以相同也可以不同。应该意识到,为两个不相等的对象产生两个不同的hashCode可以改善哈希表的性能。 CompareTo:compareTo(Object o)方法是java.lang.Comparable接口中的方法,...

阿中的小迷弟 780

Guava(六)ComparisonChain和primitives包

转载出处:http://ajoo.iteye.com/blog/740079 有时候我们不可避免地要实现Comparator, 好做排序之类的事情.  要比较两个整数的时候, 我一度曾经这么写:  Java代码   return a - b;   多简单啊! 如果a比b大, 无疑这个东西返回正数了.  可惜啊, 现实永远比理想残酷.

wea111222333的博客 637

guava ComparisonChain的源码实现

guava ComparisonChain源码的实现十分精妙,用到了利用内部类实现单例设计模式以及利用状态设计模式。代码十分优雅。 上源码欣赏: public abstract class ComparisonChain { //构造函数私有 单例模式 private ComparisonChain() {} /** * Begins a new chaine...

一木一草一枯荣 283

Guava中的一些增强集合类

写了好多和Java集合类有关的文章,学习了好多集合类的用法,有没有感觉还是有一些常见的需求集合类没有办法满足呢?需要自己使用Java集合中的类去实现,但是这种常用的轮子Google和apache都帮我们造好啦. Java相关的工具包中有两个很有名,Google Guava和Apache Commons,今天就来看一下Guava中实现的一些其他的集合类,基本上都是在JDK的集合类上做了一些增强. I...

weixin_34233856的博客 269

使用Guava的ComparisonChain实现自定义的排序

可以看到使用比较器前,先要写一个实体类,还要实现comparable接口,实现compareTo方法。这个方法一般会返回-1 0 1三个int类型数字,分别表示,对象和传入的对象比较,排序应该在传入的对象之后。因为比较器通常是为了集合排序而实现的。 ComparisonChain 的好处就在于,可以用method().method().这样的链式比较,而不用if else这种可读性很差的面向过...

weixin_30613727的博客 125

guava之ComparisonChain

其类结构为 其为抽象类 ACTIVE是匿名类,处理基本类型及Comparable,result值为0 InactiveComparisonChain类,其比较的抽象方法实现都是返回本身。result返回初始化的值 LESS:InactiveComparisonChain类实例,result初始为-1 GREATER:InactiveComparisonChain类实例,result初始为1 ...

多看多听多总结 316
上一篇: Guava学习(四):Ordering(流畅风格排序器)
下一篇: Guava学习(六):不可变集合
Blue Code
博客等级 码龄11年 3粉丝 21原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值