guava--应用篇(三)Ordering 和异常处理 Throwables

科研绘图系列:R语言绘制差异蝴蝶图(Butterfly Chart) 科研绘图系列:R语言蝴蝶图(Butterfly Chart) 阅读详情

Ordering: guava对比较器的扩展

         在java中进行类的排序大小比较,需要实现comparable接口 也就是内部比较器, 或者 使用外部比较器Comparator,

 定义一个book类,实现了comoparable接口

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book implements Comparable<Book> {
    
    private String bookName;
    private Double price;
    private String author;
    private Date createDate;

    @Override
    public int compareTo(Book b2) {
        return Double.compare(price,b2.getPrice());
    }
}

初始化几个集合

    private List<Book> books;
    private List<String> strings;
    private List<Integer> integers;

    @Before
    public void initList() {
        books = Lists.newArrayList();
        books.add(new Book("java1234",9.9,"java",new Date()));
        books.add(new Book("python1234",10.9,"python",new Date()));
        books.add(new Book("scala1234",8.9,"scala",new Date()));
        books.add(new Book("c++1234",14.9,"c++",new Date()));
        integers = Lists.newArrayList(2, 9, 8, 1);
        strings = Lists.newArrayList("zhangsan", "lisi", "wangwu");
    }

代码示例:

1. 构建Ordering

    Ordering.natural();

     Ordering.usingToString();

    Ordering.from(comparator);

    Ordering.compound(Iterable<comparator>)

        /**构建 ordering**/
//        natural,返回使用值的自然顺序进行比较的ordering实例
        Ordering<Comparable> natural = Ordering.natural();

//        usingToString, 返回对象的tostring后的字符串形式进行比较的ordering实例
        Ordering<Object> objectOrdering = Ordering.usingToString();

//         from, 返回基于现有的comarator 的ordering
        Ordering<Book> fromOrdering = Ordering.from(Comparator.comparing(Book::getAuthor));

//        compound, 返回带有多个比较器的排序规则,比如按照bookName排序,bookName相同的则按照price
        Ordering<Book> compound1 = Ordering.compound(Lists.newArrayList(
                Comparator.comparing(Book::getBookName),
                Comparator.comparing(Book::getPrice)));

2. ordering 的实例方法和链式调用组合多个排序规则

    onResultOf(Function<F,? extends T> function)

       Ordering<Comparable> natural = Ordering.natural();
//        onResultOf ;排序前先应用一个function的结果 进行排序,下面就是按照bookName排序的,并么按照book
//        中自己实现的comparable的排序
        Ordering<Book> bookOrdering = natural.onResultOf(new Function<Book, Comparable>() {
            @Override
            public Comparable apply(@Nullable Book book) {
                return book.getBookName();
            }
        });
        List<Book> books = bookOrdering.sortedCopy(this.books);
       books.forEach(book -> System.out.println(book.getBookName() +" == " + book.getPrice()));
//       输出结果,按照名称排序
//        c++1234 == 9.9
//        java12345 == 10.9
//        java12345 == 9.9
//        scala1234 == 10.2

 其他实例方法

 @Test
    public void testorderingSort() {
        Ordering<Comparable> natural = Ordering.natural();
//        max()最大
        System.out.println(natural.max(1, 3, 2)); //3
//        min()最小
        System.out.println(natural.min(1,5,0));  //0
//        leastOf(Iterable<E> iterable, int k)
//        返回k个最小元素,从小到大
        System.out.println(natural.leastOf(Lists.newArrayList(1,7,2,4,6,3),3)); // [1,2,3]
//        greatestOf(Iterable<E> iterable, int k)
//        返回k个组大元素,从大倒下
        System.out.println(natural.greatestOf(Lists.newArrayList(1,7,2,4,6,3),3)); // [7,6,4]
//        isOrdered(Iterable<? extends T> iterable), 判断是否是排好序的集合
        System.out.println(natural.isOrdered(Lists.newArrayList(1,23,2))); // false
//         nullsFirst(), 视为null为最小的
        System.out.println(natural.nullsFirst().min(null,1));  // null
//        nullsLast(),  是为null 为最大
        System.out.println(natural.nullsLast().max(null,1));   // null
//        reverse(), 反转排序
        System.out.println(natural.nullsLast().reverse().max(null,1));  // 1
//        sortedCopy, 返回一个拍好序的可变List
        natural.sortedCopy(Lists.newArrayList(1,2,5,4,3)).forEach(System.out::print); //12345

    }

 

Throwables

 这个用的不多 ,可以参考找个:http://ifeve.com/google-guava-throwables/

 

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml 全网最详细的YOLOv5源码解读之配置文件yaml。逐行注释,逐句讲解,一文带你了解yaml。小白必看! 阅读详情

相关推荐

BEV感知技术全景解析:从纯视觉到多传感器融合的实战指南

本文全面解析了自动驾驶中的BEV感知技术,从纯视觉到多传感器融合的实战应用。文章深入探讨了BEV如何提供“上帝视角”,对比了IPM、Lift-Splat-Shoot及Transformer等核心实现范式,并详细阐述了多传感器融合(尤其是中融合)的工程实践与优势,为开发者提供了从理论到原型搭建的完整指南。

win55的博客 1136

Guava Ordering

Ordering是Guava基于比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。从实现上说,Ordering实例就是一个特殊的Comparator实例。Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器。 Ordering比较器构...

卓立的博客 417

深入解析STM32定时器中央对齐模式3的双中断机制

本文深入解析了STM32定时器中央对齐模式3的双中断机制。该模式在一个PWM周期内,会在计数器到达ARR(上溢)和0(下溢)时各触发一次更新中断,实现更精细的实时控制。文章详细阐述了其工作原理、配置方法,并指导如何在中断服务函数中通过DIR位区分中断来源,同时探讨了其在电机控制、数字电源等场景下的应用优势与CPU负载挑战。

weixin_29164185的博客 492

Guava简介(详细)

Guava简介(详细、全)

weixin_42326851的博客 2万+

【BigWorld 游戏服务器引擎】Cell 架构设计介绍,及Java实现方案的探索

横向扩展(Scalability):通过动态增减CellApp和BaseApp的数量,可以轻松应对玩家人数的变化。世界可以做得非常大,只需增加更多的 Cell。负载分离(Load Separation):将不同性质的负载分离,避免了单一进程瓶颈。CPU 密集型的实时计算(CellApp)和 I/O 密集型的数据操作(BaseApp)互不影响。高效的视野管理(AOI):每个 Cell 只关心自己区域内和边界上的实体,大大降低了计算复杂度。容错性:某个CellApp。

代码时光 1203

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

结合了很多项目和文章,总结一篇项目构建的笔记。 温馨提示:文章末尾记录了我在搭建项目过程中,遇到的一些问题和解决办法 ~

aDiaoYa_的博客 4231

Guava官方文档中文版(一)-介绍基本工具

Guava文档中文版

dzq584462393的专栏 6365

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

Guava,一个超级厉害的Java工具库

介绍Google Guava库的基本概念、引入方法以及在Java开发中的应用

黑马非马的博客 3529

射频仿真软件:ADS (Advanced Design System)_(29).ADS脚本编程与自动化

ADS脚本编程为射频设计提供了强大的自动化工具,可以帮助用户实现设计流程的优化、参数扫描和优化、结果分析和报告生成等任务。选择合适的脚本语言(Python、Tcl、AEL)并合理设置ADS环境,可以显著提高设计效率和准确性。通过实际项目中的应用案例,我们可以更好地理解如何利用脚本编程解决复杂的射频设计问题。希望本文对您的ADS脚本编程学习有所帮助。

kkchenjj的博客 2468

2026马斯克《Moonshots》播客独家访谈全记录与深度解析

本次访谈是马斯克2026年首份重磅公开对话,录制于2025年12月22日美国得克萨斯州奥斯汀特斯拉超级工厂(Cybertruck与Optimus机器人核心生产基地),于2026年1月6日通过《Moonshots》播客正式上线,全时长近3小时。

lpfasd123的博客 2648

Google 的核心 Java 库 guava 常用工具类

目录 com.google.common.collect.Lists 工具类 com.google.common.primitives.Ints 整形操作 com.google.common.collect.Multiset Multimap 提供一个 key 对多个值 连接器 Joiner、分割器 Splitter 字符匹配器:CharMatcher com.google.comm...

蚩尤后裔-汪茂雄 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java异常处理神器:Guava Throwables类

Guava由Google开发,它提供了大量的核心Java库,例如:集合、缓存、原生类型支持、并发库、通用注解、字符串处理和I/O操作等。这些功能在日常的Java开发中超级常用,而且Guava的设计哲学是简洁高效,这让咱们的代码不仅更加优雅,而且更加易于维护和阅读。尤其是在异常处理这块,Guava提供了一个强大的工具类:Throwables。它简化了Java中的异常处理,让咱们在处理各种棘手的异常时可以更加得心应手。咱们下面就来具体看看这个Throwables类都能干些什么吧!

宋小黑的博客 1182

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Guava Throwables 异常处理工具类

Guava的Throwables类提供了简化Java异常处理的工具方法,主要包括:获取异常根本原因(getRootCause)、堆栈跟踪转字符串(getStackTraceAsString)、异常传播(propagate)和类型检查(isUnchecked)等功能。实际应用中可用于统一异常处理、异步编程等场景,但需注意propagate方法已过时,且获取完整堆栈跟踪较耗性能。最佳实践建议谨慎使用异常包装,合理记录异常信息。新项目可考虑使用Java8的CompletableFuture或自定义工具类作为替代方

油墨香^-^的博客 946

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Guava 心得:简化异常处理的 Throwables 类

有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如: import java.io.IOException; import org.junit.Test; import com.google.common.base.Throwables; public class ThrowablesTest { @Test public void testThrowables(){

weixin_42073629的博客 526

简化异常处理的Throwables类

 有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:import java.io.IOException; import org.junit.Test; import com.google.common.base.Throwables; public class ThrowablesT...

wxzyzydd的博客 1362

异常传播 Throwables 类 - Google Guava

一、Throwables 类简介 Throwable 类,简化异常和错误的传播与检查 二、常用方法 官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/base/Throwables.html 方法类型 方法描述 static List<Throwable> getCausalChain(Throwable throwable) 获取一..

程序员咏哥的博客 820

Guava学习笔记(五):简化异常处理的Throwables类

有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如: import java.io.IOException; import org.junit.Test; import com.google.common.base.Throwables; public class Throwable...

liinux-Talk is cheap,show me the code. 648

Guava使用之Throwables异常简化、错误传播和检查

任何人都不敢说自己的代码没有bug,所以程序抛异常是再经常不过的事情,有时候,你会想把捕获的exception抛到上一个try/catch块。对于 RuntimeException 和 Error 尤为如此,它们不需要try/catch 块,但可能被其他的 try/catch 块无意捕获。你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeE

Alan_Mathison_Turing的博客 719

Guava的基础功能与集合

Guava中的基础功能和集合

hefrankeleyn的博客 9035

[Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)

我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3537508.html ,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。 Guava的Throwables工具常常可以让exception处理更方便。 Propagation 有时候,你会想把捕获的exception抛到上一个try/catch块。...

dianshanguo5388的博客 249

Guava源码阅读-简化异常处理的Throwables类

有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如: import java.io.IOException; import org.junit.Test; import com.google.common.base.Throwables; public class ThrowablesT...

冬ji陽光 204

Guava处理异常

guava处理异常

usa_washington的博客 1374
上一篇: guava--应用篇(二)Optional 和断言 Preconditions
下一篇: markdown编辑器介绍(.md 文件编写)
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值