guava_函数式编程

随机振动分析与疲劳寿命评估:从PSD到Dirlik方法的ANSYS Workbench实战 工程结构在实际服役中常面临宽频随机振动环境,传统的静强度校核难以准确预测共振点附近的疲劳破坏。功率谱密度(PSD)作为描述随机激励能量分布的统计工具,是频域振动分析的基础。通过模态分析获取结构固有特性,再基于PSD激励计算应力响应的统计特征(如1σ、3σ值),进而借助频域疲劳方法(如Steinberg法、Dirlik方法)结合Miner线性累积损伤准则估算寿命,已成为结构抗振设计的主流技术路线。该方法广泛应用于车载、机载、风电及运输包装等领域的设备可靠性验证,能够有效识别薄弱位置并指导优化。本文以ANSYS 阅读详情

使用guava进行函数式编程

在这一章,我们将关注使用guava将我们的开发变得更加容易,我们下面将学习具体的接口和类让我们的程序的扩展性,健壮性更好。
我们这一章里面将覆盖一下几个主题:
- Function 接口: 介绍怎样在java中使用函数式编程,并且讨论一下函数式编程的最佳实践
- Functions 类: Functions 是一个包含了一些实现Function接口的静态方法的集合
- Predicate 接口:Predicate 接口是计算一个对象是否满足条件,如果满足条件则返回True
- predicates 类: Predicates 是一个实现了 Predicate接口的静态工具类
- Supplier 接口:
- Suppliers 类: Suppliers 是提供了Supplier接口的默认实现类

使用 Function 接口

函数式编程强调实用functions实现其目标而改变状态。This is in contrast with imperative programming that typically relies on the changing state and is the approach that is familiar with most of thedevelopers. Guava中的Function接口给了我们在java中使用函数式编程的能力。
Function 仅仅包含两个方法:

public interface Function<F,T> {
T apply(F input);
boolean equals(Object object);
}

我们不会过多的讨论equals方法,ObjetA 和 Object B equals 的条件就是 在 Object A上调用 apply 方法得到得结果和在 Object B上调用 apply方法得到的结果是相等的。 apply 方法接受一个输入的object 返回一个输出的object。 一个设计优秀的 Function的实现在经过apply调用后,输入参数应该保持不变,返回值可以是一个新的对象,而不应该改变输入参数的值然后返回。 下面是一个将java.util.date 对象转换成 对应的 String :

public class DateFormatFunction implements Function<Date,String> {
@Override
public String apply(Date input) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy");
// 注意这里的 input 并没有变化
return dateFormat.format(input);
}
}

在上面的例子我们非常清晰的看到了将 java.util.date 通过使用SimpleDateFormat转换成了我们期望的String格式。 这个例子有点过于简单,但是其主要目的是为了向我们展示使用Function接口的目的,就是将转换的细节隐藏。 这个例子中我们声明了一个实现了Function的类,我们也可以很简单使用匿名类实现。 就想下面展示的那样:

Function<Date,String> function = new Function<Date, String>() {
@Override
public String apply( Date input) {
return new
SimpleDateFormat("dd/mm/yyyy").format(input);
}
};

上面的这两个其实没有什么本质的区别,一个是声明了一个类,一个是使用匿名类实现。

使用Function 接口的方针

这是一个非常好的时机去讨论 在代码中使用Function接口和匿名类。 目前的java版本中,还没有在其他语言已经存在的闭包特性。在即将发布的java 8 版本中将会出现这一特性,目前在java实现闭包的方式是使用匿名类。 虽然使用匿名类和使用闭包一样高效,但是笨重的语法,并且使用了多了之后,代码将变个晦涩难懂也更难维护。 事实上,我们来分析一下前面的例子,虽然他展示了Functions的使用方法,但是我们并没有从中感觉到好处,实现这样的功能,我们觉得下面这样写更方便:

public String formatDate(Date input) {
return new SimpleDateFormat("dd/mm/yyyy").format(input);
}

和前面的使用匿名类实现的方式相比,最后一个例子的写法更容易理解。 什么时候使用 Function 取决于你希望在哪里进行日期转换。 如果你有一个包含了 Date 变量和一个将date 转换成 String的方法,那么还是最好使用最后一种方式.但是如果你有一个集合的Date对象需要是用字符串表示,使用Function 接口就会比较方便。 这里主要要强调的一点就是,我们不能为了使用Function而使用Function。 在使用Function之前考虑一下,我们能从使用Function的过程中获取什么样的好处。 当我们后面学习guava的collections,cache的时候,我们将看到一些合适的例子。

使用 Functions 类

Functions 类包含了一些有用的方法,在这一小节中,我们将介绍两个非常有用的方法来提高gauva的生产效率。

使用 Functions.forMap方法

forMap接受一个Map

public class State {
private String name;
private String code;
private Set<City> mainCities = new HashSet<City>();
}

现在我们假设我们有一个Map,名字是stateMap,他的组成形式是Map

Function<String,State> lookup = Functions.forMap(stateMap);
//Would return State object for NewYork
lookup.apply("NY");

关于Functions.forMap方法的使用有一些注意的地方,如果在stateMap中根据指定的key没有找到对应的state,那么会抛出IllegalArgumentException 异常,但是还有了;另外一种形式的Functions.forMap(),可以指定一个defaultValue,当根据key没有找到对应的value时,就会返回默认的值。 使用Function 接口我们可以很简单的替换具体的实现类。 我们也可以配合Splitter(我们上一章提到的),是的guava变得更加锋利。

使用Functions.compose方法

现在想像一下你有另外一个类,这个类代表了一个城市city,类的定义如下:

public class City {
private String name;
private String zipCode;
private int population;
public String toString() {
return name;
}
}

考虑下面一种情况,我们想构造这样一个Function的实例,将state中的mainCities以逗号分隔的方式返回,那我们应该怎么做呢?

public class StateToCityString implements Function<State,String> {
@Override
public String apply(State input) {
return Joiner.on(",").join(input.getMainCities());
}
}

现在我们来再往前思考一步,我们我们只想通过一个Function的实例能获取State下面的MainCities的缩写,Guava提供一个更加优秀的方法,它就是Functions.compose 方法,这个方法就是两个Function的实例作为参数,返回一个的包含了连个Function功能的实例。 具体我们看一下代码:

Function<String,State> lookup = Functions.forMap(stateMap);
Function<State, String> stateFunction = new StateToCityString();
Function<String,String> composed =
Functions.compose(stateFunction ,lookup);

现在我们通过调用 composed.apply(“NY”)我们就可以获得”Albany,Buffalo,NewYorkCity”.

让我们花几分钟来看一下这段代码的调用过程,从结果我们可以看出,先是调用了lookup.apply()的方法,将其的返回值作为stateFunction的输入参数,stateFunction.apply()的放回结果就是我们想要的结果. 总的来说,简化班的调用过程是如下的代码:

String cities = stateFunction.apply(lookup.apply("NY"));

使用Predicate接口

Predicate 接口和Function接口有点类似,Predicate接口也有两个方法,下面是Predicate接口的定义:

public interface Predicate<T> {
boolean apply(T input)
boolean equals(Object object)
}

和Function接口类似我们这里暂不详细的讨论equals方法。 Function 接口是用来转换Objects,而Predicate的apply方法是用来过滤objects。Predicate的使用准则和Function的使用准备差不多,不要滥用Predicate接口,再下一张的 guava 集合中,我们将看到Predicate的最佳实践。

Predicate 接口的例子

这个例子使用Predicate接口去过滤到人口小于 50000的城市。

public class PopulationPredicate implements Predicate<City> {
@Override
public boolean apply(City input) {
return input.getPopulation() <= 500000;
}
}

一般来说,Predicate用来在集合后过滤掉那些不符合条件的记录。 关于Predicate的使用基本和Function差不多。这里不在细说。

使用Predecates 类

Predicates 类是一个包含了许多有用方法的 Predicate实例对象, Predicates 类提供了 Predicates.and, Predicates.or,Predicates.not,Predicate.compose等方法,让我先从最简单的看起:

public class TemperateClimatePredicate implements Predicate<City> {
@Override
public boolean apply(City input) {
return input.getClimate().equals(Climate.TEMPERATE);
}
}
public class LowRainfallPredicate implements Predicate<City> {
@Override
public boolean apply(City input) {
return input.getAverageRainfall() < 45.7;
}
}

一般来说我们使用Predicate 都会声明为匿名类,但是这里为了表达清楚,我们还是使用了具体的类。

使用Predicates.and 方法

Predicates.add方法接受 多个Predicate实例,返回单个Predicate实例,如果所有的实例的运算后的结果都是true,那么最后返回的结果就是true,如果其中的任意一个返回false了,那么后续的Predicate实例就不会再继续执行,让我们来看一个具体的例子:

Predicate smallAndDry =
Predicates.and(smallPopulationPredicate,lowRainFallPredicate);

对于多个Predicate实例我们也可以使用如下的方式:

Predicates.and(Iterable<Predicate<T>> predicates);
Predicates.and(Predicate<T> ...predicates);

使用Predicates.or方法

Predicates.or方法接受多个Predicate实例,返回一个Predicate实例,如果其中一个Predicate返回为true,那么最终的返回结果就是true,并且后续的Predicate实例对象也不会再继续执行。

对于多个Predicate实例我们也可以使用如下的方式:

Predicates.and(Iterable<Predicate<T>> predicates);
Predicates.and(Predicate<T> ...predicates);

使用Predicates.not方法

Predicates.not 方法接受一个Predicate实例,并且对这个实例的返回值取反. 简单的例子如下:

Predicate largeCityPredicate =
Predicate.not(smallPopulationPredicate);

使用Predicates.compose方法

Predicates.compose 接受一个 Function 和 Predicate实例作为参数, 使用 Function的返回参数作为 Predicate的输入参数,Predicate根据输入参数返回true或则false。 下面是一个简单的例子:

public class SouthwestOrMidwestRegionPredicate implements
Predicate<State> {
@Override
public boolean apply(State input) {
return input.getRegion().equals(Region.MIDWEST) ||
input.getRegion().equals(Region.SOUTHWEST);
}
}
Predicate<String> predicate =
Predicates.compose(southwestOrMidwestRegionPredicate,lookup);

使用 Supplier 接口

Supplier 接口只有一个方法:

public interface Supplier<T> {
T get();
}

get 方法返回 T类型的实例对象,并且只能返回T类型的对象。 Supplier 接口帮我我们实现了很多创建型的设计模式。 比如说单列模式,懒加载模式,等等, 总的来说 Supplier 接口为程序创建对象方面留下足够多的想象空间。

Supplier 接口的例子

public class ComposedPredicateSupplier implements
Supplier<Predicate<String>> {
@Override
public Predicate<String> get() {
City city = new City("Austin,TX","12345",250000, Climate.SUB_
TROPICAL,45.3);
State state = new State("Texas","TX", Sets.newHashSet(city),
Region.SOUTHWEST);
City city1 = new City("New York,NY","12345",2000000,Climate.
TEMPERATE,48.7);
State state1 = new State("New York","NY",Sets.
newHashSet(city1),Region.NORTHEAST);
Map<String,State> stateMap = Maps.newHashMap();
stateMap.put(state.getCode(),state);
stateMap.put(state1.getCode(),state1);
Function<String,State> mf = Functions.forMap(stateMap);
return Predicates.compose(new RegionPredicate(), mf);
}
}

上面的代码中,我们结合了之前学习的Function,Predicate 等知识创建了一个新的对象。

使用 Suppliers 类

在缓存返回对象方面,Supperliers给我们提供一些简单的方法.

使用 Suppliers.memoize 方法

Suppliers的memoize方法在get()方法外面包装了一层,当第一次调用get()方法时,我们创建了一个新的实例,但是在返回之前我们做了一层代理,将对象缓存起来,然后再将对象返回出去,这下接下来的一些请求再过来时候,我们就直接返回缓存好的对象。 具体的代码如下

Supplier<Predicate<String>> wrapped =
Suppliers.memoize(composedPredicateSupplier);

使用Suppliers.memoizeWithExpiration方法

Suppliers.memoizeWithExpiration 其实就是在Supplier.memoize的基础上加上了缓存超时时间。 具体代码例子如下:

Supplier<Predicate<String>> wrapped =
Suppliers.memoize(composedPredicateSupplier,10L,TimeUnit.MINUTES);

这里的超时时间是10分钟。

总结

从上面的学习中,我们可以看到guava可以为java增加关于函数式编程的影响。 Function接口可以帮助我们transfer对象,Predicate 借口可以帮助我们过滤对象。 Supplier接口帮助我们隐藏了创建对象的细节。 通过结合使用依赖注入的方式,这些接口可以帮助我们屏蔽实现细节。 在下一章,我们将学习 guava collections。

1.4- Predicates and Quantifiers.pdf 北邮离散数学第一章第四节ppt 立即下载

相关推荐

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4589

Guava笔记之Supplier和Suppliers的使用

Supplier封装了获取值的功能,可以实现多种不同的获取值的方式,创建Supplier可以使用Suppliers类的静态方法来实现,该方法提供了多种获取值的方式,具体为: 一、Supplier接口 该接口提供了get方法用于获取值,注意其中get方法并不能传递参数信息,所以如果需要传递参数信息的话则不适用该接口。 public interface Supplier<T> exten...

Taoqigongzi_jie的博客 5991

从零构建基于ZYNQ与AD9361的SDR信号源:FPGA逻辑与射频前端的协同设计

本文详细介绍了从零开始构建基于ZYNQ与AD9361的SDR信号源的完整流程。通过解析FPGA逻辑与射频前端的协同设计,重点阐述了如何利用FPGA生成基带信号,并通过ARM处理器配置AD9361,最终实现一个可编程的2.4GHz载波信号发生器。内容涵盖硬件选型、Vivado环境搭建、AXI总线通信、LVDS接口设计及软件驱动开发,为SDR开发者提供了实用的实战指南。

weixin_29200485的博客 214

java8 Predicate

这里类是java自带主要广泛用在支持lambda表达式的API中。 1、接口源码 @FunctionalInterface public interface Predicate<T> { /** * 具体过滤操作 需要被子类实现. * 用来处理参数T是否满足要求,可以理解为 条件A */ boolean test(T t); /** * 调用当前Predicate的test方法之后再去调用other的test方法,相当于进行两

Meiko记录 1135

SQL Prompt 9.0插件突然无法使用解决办法(附防联网激活)多图+文字

可能由于Redgate公司最近抓盗版抓得严,导致激活后的SQL Prompt联网后突然无法使用,无论卸载重装都没办法继续使用,本人同时使用SQL Assistant和SQL Prompt,我喜欢SQL Assistant代码提示功能,而SQL Prompt我喜欢将查询结果复制后可以直接生产插入脚本,这是最爽的一件事,即便对表有多么熟悉,没有这些插件,几行语法都要敲大半天,目前本人已经离不开这两个插...

骚团长的博客 1万+

基于UCD3138的数字控制硬开关全桥DC-DC电源设计实战解析

在开关电源设计中,数字控制技术正逐步取代传统模拟方案,以其卓越的灵活性、可编程性和强大的数据处理能力,成为应对复杂动态响应与智能化需求的关键。其核心原理在于通过高精度模数转换器(ADC)实时采样电压、电流信号,经由数字信号处理器(如ARM内核)运行PID等控制算法,动态调整数字脉宽调制(DPWM)输出,从而实现对功率级的精确控制。这种技术价值体现在能够轻松实现高级算法(如输入电压前馈、非线性补偿)、灵活配置保护参数,并通过PMBus等接口实现智能化监控与管理。其典型应用场景包括通信基站、服务器电源以及工业设

1312

Predicate 实现 And 和 Or的逻辑

需求给一个集合,找到满足添加的对象,一下条件可能会动态的变化,有时候只需要满足一个,有时候需要满足两个。。。1、大于。。 2、小于。。 3、是偶数使用Predicate完成需求Predicate主要作用就是输入一个参数,输出一个Boolean值,用于判断这个输入的参数是否满足某个条件 Predicate 接口里面 一个默认方法 ,可以完成多个条件的组合default Predicate&lt...

HBLOG 1604

3.详解Labview串口通讯--从串口线连接到串口通讯保姆级教程

本文非常详细的介绍了使用Labview实现串口通讯,读完题主这篇文章,即使你是今天刚下载的Labview,也能熟练的连接并驱动串口执行,接下来和我一起学习下,记得关注并点赞不迷路

关注我,更多技术问题欢迎私聊~ 1万+

Java中函数式编程的谓词函数(Predicates)

什么是谓词函数? Apache Commons Collections里的谓词函数仅仅只是一个只有一个方法的接口: evaluate(Object object): boolean 这就是谓词函数,输入一个对象,返回true或false。在Google Guava中,定义了Predicate接口,该接口包含一个带有泛型参数的方法: apply(T input): boolean

让我们荡起双桨的博客 4450

十一、Cadence ic 617以及assura使用总结

1.617的端口和514不同,没有网络属性,使用时不能直接放在原理图上,如果要直接放在图上要接线并且放上标签。2.617的端口也不能直接放在线上,514中将端口直接放在线上是可以使端口和线连接,但617看似连接,但拉出来线没有交点,实际上没有连接。这里set switches里的选项表示不同的模块,也就是选择一个就只对这一部分进行DRC验证,要验证整个版图的DRC就要把所有的选项选中,然后一个个改正。LVS中也是一样,要全部选中改正。

0 2295

【基于 CasADi 的欠驱动无人船实时非线性模型预测控制(NMPC)实现 Visual Studio 2022 C++】

本文介绍了基于CasADi和IPOPT在Visual Studio 2022 C++环境下实现的欠驱动无人船实时非线性模型预测控制(NMPC)方案。文章详细阐述了NMPC基本原理、欠驱动无人船动力学模型(包含状态变量和控制变量定义),并给出了C++实现的核心代码框架。该方案通过显式引入系统动力学模型和约束条件,在每个采样周期滚动优化控制序列,有效解决了欠驱动无人船的轨迹跟踪与避碰问题。文中还提供了VS2022配置CasADi环境的详细步骤,包括预编译包下载、工程属性设置等关键环节,为工程实现提供了完整的技术

vor234的博客 652

Guava中的函数式编程

本文咱们一起讨论了什么是函数式编程,以及Guava如何在Java中提供这样的功能。Guava的Functions和Predicates等类为Java带来了更丰富的函数式编程工具,使得编写清晰、简洁的代码变得可能。通过实际的案例,咱们看到了Guava函数式编程在实际开发中的应用。无论是数据转换、过滤,还是更复杂的操作,Guava都能帮助咱们以更高效的方式实现。咱们还探讨了如何将Guava的函数式编程特性与Java 8的新功能结合起来。这种结合为Java程序员提供了更多的灵活性和更强的编程能力。

宋小黑的博客 1362

气象大模型光伏功率预测中的应用:从短期,超短期,中长期的实现与开源代码详解

本文详细介绍了基于大模型的光伏功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)预测。文章首先讨论了数据准备与预处理,包括历史功率、气象、天文和电站特性数据的收集与特征工程。随后,针对不同预测需求,提出了多种深度学习模型:超短期预测采用1DCNN-LSTM混合模型,短期预测使用Transformer模型,中长期预测则通过多尺度特征提取模型和概率预测方法处理不确定性。文章还提供了模型训练、评估、部署和优化的完整流程,并开源了代码实现。未来研究方向包括结合数值天气预报、开发时

专注AI大模型,软件混淆,授权 1573

guava函数式编程

[Google Guava] 4-函数式编程 原文链接 译文链接译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果。预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提供这类支持。 过度使用Guava函数式编程会导致冗长、混乱、可读性差而且低效的代码。这是迄今为止最容易(也是...

157

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用Guava进行函数式编程

本文翻译自Getting Started with Google Guava这本书,如有翻译不足的地方请指出。 在这一章,我们开始注意到使用Guava进行编写代码会更加简单。我们将看看如何使用Guava当中的接口和类可以帮助我们,通过应用行之有效的模式,以使我们的代码更容易维护以及健壮。  在本章中我们将包含一下几点: Function接口:这说明在java编程当中可以引入函

jackyechina的专栏 1617

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Google Guava与函数式编程相关的类

文章目录1.注意事项2.函数和谓语3.特殊谓语4.操作函数和谓语5.使用6.谓语7.使用示例7.1Function7.2Predicate7.3Equivalence7.4Converter7.5Supplier Functional idioms:Guava的函数习语可以大大简化代码。 1.注意事项 Java 8包括java.util.function和java.util.stream软件包,它...

Life is for sharing的博客 596

guava function and predicate 函数式编程

@Test public void function(){ List<String> list = Lists.newArrayList("1","2","3"); List<Integer> integers = Lists.transform(list,new Function<String, Integer>() { @Over...

weixin_30763397的博客 111

83 | 开源实战三(下):借 Google Guava 学习函数式编程

今天,我从特性上告诉你,什么是函数式编程。函数式编程指数学“函数”或者“表达式”。编程思想函数式编程认为,程序可以用一系列数学函数或表达式的组合来表示。函数式编程是程序面向数学底层的抽象,将计算过程描述为表达式。应用场景:科学计算、数据处理、统计分析。编程实现以函数作为组织代码的单元。它跟面向过程编程的区别在于,它的函数是无状态的。函数内部涉及的变量都是局部变量。同样的入参,不管怎么执行,得到的结果都是一样的。

Balance 1135

java guava 函数式编程

Guava:google的工程师利用传说中的“20%时间”开发的集合库,它是对jdk提供的扩展,提供了很多实用的类来简化代码。 开源地址:https://github.com/google/guava jar包下载:http://maven.outofmemory.cn/com.google.guava/guava/ package com.uwo9.test08;

幻影寒狼 490

[Google Guava] 4-函数式编程

原文链接 译文链接 译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果。预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提供这类支持。 过度使用Guava函数式编程会导致冗长、混乱、可读性差而且低效的代码。这是迄今为止最容易(也是最经常)被滥用的部分,如果你想通过函数式风格达成一行代码,致使这行代码长到荒唐,Gua...

GarfieldEr007的专栏 693

guava java 1.8_Java经典类库-Guava中的函数式编程讲解

如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava。选择junit,因为我喜欢TDD,喜欢自动化测试。而是用Guava,是因为我喜欢简洁的API。Guava提供了很多的实用工具函数来弥补java标准库的不足,另外Guava还引入了函数式编程的概念,在一定程度上缓解了java在JDK1.8之前没有lambda的缺陷,使使用java书写简洁易读的函数式风格的代...

weixin_34836906的博客 316

java guava函数式编程_练习

package guava只读函数式编程过滤转换约束集合; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.List; import java.util.Set; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Predic

weixin_45339692的博客 167

Guava 是个风火轮之函数式编程(3)——表处理

云栖社区> 博客列表> 正文 Guava 是个风火轮之函数式编程(3)——表处理 潘家邦 2016-01-26 13:19:21 浏...

138

Java Guava中的函数式编程讲解

如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava 。选择junit,因为我喜欢TDD,喜欢自动化测试。而是用 Guava ,是因为我喜欢简洁的API。 Guava 提供了很多的实用工具函数来弥补java标准库的不足,另外Guava 还引入了函数式编程的概念,在一定程度上缓解了java在JDK1.8之前没有lambda的缺陷,使使用java书写简洁易读的函

Flyer的后花园 855
上一篇: GUAVA的基本使用
下一篇: guava_collections
bubble_q
博客等级 码龄12年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值