Function和Predicate可以说是Guava最好用的工具了。
Function用于把一种类型的对象转化为另一种类型的对象。
Predicate用于判断某个对象是否符合一定条件。
单用Function和Predicate可能还看不出他的强大,但是配合集合类,就可以极大地简化代码编写。
Function可以配合集合的transform方法,来将一个集合转换为另一个集合。
FluentIterable<Integer> rs = FluentIterable.from(strings) .transform(new Function<String, Integer>() {
public Integer apply(String string) {
return string.length();
}
}));
Predicate可以配合集合的filter方法,将一个集合符合条件的记录重新组成另一个集合。
FluentIterable<String> rs = FluentIterable.from(strings)
.filter(new Predicate<String>() {
public boolean apply(String string) {
return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string);
}
})
Functions中有些static方法可以快速得到常用的一些函数:
forMap(Map<A, B>) 以map作为函数
compose(Function<B, C>, Function<A, B>) 组合2个函数
constant(T) 返回常量T
identity() 返回值和输入参数相等的函数
toStringFunction() 使用toString方法返回的函数
Predicates中也有一些方法,可以快速得到一些常用的判断:
instanceOf(Class)
assignableFrom(Class)
contains(Pattern)
in(Collection)
isNull()
alwaysFalse()
alwaysTrue()
equalTo(Object)
compose(Predicate, Function)
and(Predicate...)
or(Predicate...)
not(Predicate)
基本上,很多集合的帮助类都提供了filter方法。返回的类型一般都跟传入的是一致的。
Iterables.filter(Iterable, Predicate)
Iterators.filter(Iterator, Predicate)
Collections2.filter(Collection, Predicate)
Sets.filter(Set, Predicate)
Sets.filter(SortedSet, Predicate)
Maps.filterKeys(Map, Predicate)
Maps.filterValues(Map, Predicate)
Maps.filterEntries(Map, Predicate)
Maps.filterKeys(SortedMap, Predicate)
Maps.filterValues(SortedMap, Predicate)
Maps.filterValues(SortedMap, Predicate)
Multimaps.filterKeys(Multimap, Predicate)
Multimaps.filterValues(Multimap, Predicate)
Multimaps.filterEntries(Multimap, Predicate)
注意:Lists没有提供filter方法,因为List没有办法高效的实现get(int)。
可以替代的这样实现filter:Lists.newArrayList(Collections2.filter(list, predicate))
FluentIterable里面还有个更加通用的filter方法:
FluentIterable.filter(Predicate),返回的FluentIterable<E>对象,可以使用集合的工厂方法构造所需要的集合类型。
Iterables 还提供了一些方法来根据Predicate来获取集合的元素:
boolean all(Iterable, Predicate)
boolean any(Iterable, Predicate)
T find(Iterable, Predicate)
T find(Iterable, Predicate, T default)
Optional<T> tryFind(Iterable, Predicate)
indexOf(Iterable, Predicate)
removeIf(Iterable, Predicate)
Iterators也有类似的方法:
Iterators.all(Iterator, Predicate)
Iterators.any(Iterator, Predicate)
Iterators.find(Iterator, Predicate)
Iterators.find(Iterator, Predicate, T default)
Iterators.indexOf(Iterator, Predicate)
Iterators.removeIf(Iterator, Predicate)
FluentIterable也有类似的方法:
FluentIterable.allMatch(Predicate)
FluentIterable.anyMatch(Predicate)
FluentIterable.firstMatch(Predicate)
类似于filter,guava的集合帮助类也提供了transform方法,来转换集合对象。
Iterables.transform(Iterable, Function)
Iterators.transform(Iterator, Function)
Collections2.transform(Collection, Function)
Lists.transform(List, Function)
Lists.transform(List, Function)
Maps.transformValues(Map, Function)
Maps.transformEntries(Map, EntryTransformer)
Maps.transformValues(SortedMap, Function)
Maps.transformEntries(SortedMap, EntryTransformer)
Multimaps.transformValues(Multimap, Function)
Multimaps.transformEntries(Multimap, EntryTransformer)
Multimaps.transformValues(ListMultimap, Function)
Multimaps.transformEntries(ListMultimap, EntryTransformer)
Tables.transformValues(Table, Function)
注意:Sets没有提供transform方法,因为Set没有办法提供高效的contains(Object)实现。
可以替代的这样实现transform:Sets.newHashSet(Collections2.transform(set, function))
EntryTransformer和Function类似,但是提供了EntrySet(key,value)到另一个对象的转换。
类似于filter,FluentIterable里面有更加通用的transform方法
FluentIterable.transform(Function),返回的FluentIterable<E>对象,可以使用集合的工厂方法构造所需要的集合类型。
除了集合类,还有些类可以和Function及Prediction配合使用:
Ordering.onResultOf(Function) 排序后的结果使用函数再做一次转换
Predicates.compose(Predicate, Function) 返回 predicate(function(x))
Equivalence.onResultOf(Function) 使用函数转换后再判断是否相等
Suppliers.compose(Function, Supplier) 对Supplier得到的值做一次转换
Functions.compose(Function, Function) 两次function
下一篇将介绍到的并发类 ListenableFuture 也可以配合Function使用,将ListenableFuture转换为新的ListenableFuture。
Futures.transform(ListenableFuture, Function)
Futures.transform(ListenableFuture, AsyncFunction)
Futures.transform(ListenableFuture, Function, Executor)
Futures.transform(ListenableFuture, AsyncFunction, Executor)
相关推荐
【大模型12步学习路线 · 第3步 · ③IC验证实战篇】SOTA Prompt 逐字拆解
本文拆解了4篇SOTA LLM4Verification论文的Prompt设计,重点分析了AssertLLM、RTLFixer等模型在IC验证领域的Prompt工程实践。AssertLLM通过任务分解为3个专用LLM(Spec分析、信号映射、SVA生成),结合领域RAG和定制System Prompt,将SVA准确率从GPT-4的8%提升至89%。RTLFixer采用ReAct框架实现98.5%的RTL语法错误修复率。文章总结了Prompt设计的关键技巧:任务分解、结构化输出、置信度评分、允许"不确定"标记
使用setfilter实现查询
setfilter在许多的IDE中都已经支持了,QT也不例外。在操作数据库中QSqlQueryModle,QSqlTableModle都对齐进行了支持。那么我们可以用它来实现过滤查询。 一、完全匹配查询 1、普通字符串查询 普通字符串,当使用参数的时候必须注意在参数前后加上单引号: tmodel->setFilter(QObject::tr(“dCode=’%1’”).arg(str)); ...
Qt6导入QtChart绘制图表(添加组件)
我在按照大佬们的说明添加QtChart时发现,我的电脑上并不能正确的添加QtChart并编译通过,所以在综合了两位大佬的说明又自己探索了一番后,正确编译通过,分享出来,以便同志们节省一些时间。
guava java 1.8_Java经典类库-Guava中的函数式编程讲解
如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava。选择junit,因为我喜欢TDD,喜欢自动化测试。而是用Guava,是因为我喜欢简洁的API。Guava提供了很多的实用工具函数来弥补java标准库的不足,另外Guava还引入了函数式编程的概念,在一定程度上缓解了java在JDK1.8之前没有lambda的缺陷,使使用java书写简洁易读的函数式风格的代...
告别手动打点计时:用Lauterbach TRACE32的RunTime功能,5分钟搞定嵌入式代码段性能分析
本文深入解析了Lauterbach TRACE32的RunTime功能在嵌入式代码性能分析中的革命性应用。通过硬件级计时原理和非侵入式设计,该功能能快速精确测量代码执行时间,显著提升开发效率,特别适用于汽车电子和工业控制领域。文章还提供了从基础设置到高级分析的完整实战指南,帮助工程师轻松掌握这一强大工具。
winpcap无法安装提示新版本已经安装解决办法
问题显示如下该问题会导致ensp里的云识别不到网卡可能是因为之前安装了npcap,而且安装时勾选了第四个选项导致无法安装,需要完全卸载npcap解决办法:办法一:在控制面板的程序与卸载里面卸载npcap和winPcap,然后再安装winPcap,如果搜不到往下看办法二:在C:\Windows\SysWOW64目录下搜索wpcap.dll和packet.dll并重命名为wpcap.dll.old和packet.dll.old办法三:如果搜不到这两个文件需要安装win10Pcap才能找到这两个文件下载地址:Wi
字符串集合转整型集合List<String> => List<Integer>
/** * 普通循环转换 */ public static Consumer<List<String>> forConversion() { return list -> { List<Integer> integers = Lists.newArrayList(); ...
基于立创·天猛星MSPM0G3507的简易PID电机控制入门项目实战
本文详细介绍了基于立创·天猛星MSPM0G3507开发板的简易PID电机控制入门项目实战。从硬件选型、电路设计、PCB布局,到软件编程中的编码器读取、PID算法实现与调参,手把手教你完成一个带屏幕显示的电机定速与定距控制项目,是学习嵌入式开发和经典PID控制算法的绝佳实践。
Guava中的函数式编程
本文咱们一起讨论了什么是函数式编程,以及Guava如何在Java中提供这样的功能。Guava的Functions和Predicates等类为Java带来了更丰富的函数式编程工具,使得编写清晰、简洁的代码变得可能。通过实际的案例,咱们看到了Guava函数式编程在实际开发中的应用。无论是数据转换、过滤,还是更复杂的操作,Guava都能帮助咱们以更高效的方式实现。咱们还探讨了如何将Guava的函数式编程特性与Java 8的新功能结合起来。这种结合为Java程序员提供了更多的灵活性和更强的编程能力。
【实践】VECTOR AUTOSAR创建SWC读写CAN信号
在AUTOSAR开发中最必要的功能就是读写CAN信号,本文通过一步步说明,介绍如何开发SWC来读写CAN信号,可以说在AUTOSAR中实现读写CAN信号的实践过程,是一个非常基础且典型的练习。在本篇文章阅读之前,推荐阅读AUTOSAR RTE介绍,本篇文章介绍了RTE的比较全面的介绍了AUTOSAR RTE。理解了RTE之后,才能对SWC的设计更加清楚。话不多说,接着上一篇内容VECTOR DaVinci从0到1搭建工程,此篇文章我们介绍如何在DaVinci Developer中开发SWC访问CAN信号。为
TIA博途WINCC的触摸屏VB脚本入门指南(嵌入式)
通过编写事件处理程序,您可以响应触摸屏元素的各种事件,并实现自定义的功能。本文将为您提供TIA博途WINCC触摸屏VB脚本的入门指南,帮助您了解基本的脚本编写和嵌入式开发。假设我们有一个名为"Button1"的按钮元素,当用户点击该按钮时,触发相应的事件处理程序,并在触摸屏上显示一条消息。然后回到触摸屏界面编辑器,在按钮元素的属性窗口中找到"按下"事件,并选择刚才创建的脚本文件作为事件处理程序。现在,当用户点击按钮时,触摸屏将执行相应的事件处理程序,并显示一条消息框,内容为"按钮被点击了!
Guava中Function用法总结
Function接口让我们在java代码当中引入函数式编程成为可能。 Function接口当中只有2个方法: public interface Function<F,T> { T apply(F input); boolean equals(Object object); } 示例1:组合式函数编程 import com.google.common.collect.L...
数学建模Matlab算法,第七章 对策论
对策论作为研究竞争与决策的数学理论,从零和对策到非常数和对策,为分析各类博弈问题提供了系统框架。其核心要素包括局中人、策略集和赢得函数,通过稳定解、Nash平衡点等概念揭示竞争规律。该理论广泛应用于经济、军事、政治等领域,不仅提供具体分析工具,更改变了决策思维方式,强调在互动中实现理性选择。对策论既揭示了竞争本质,也凸显合作价值,为解决社会矛盾、促进共赢发展提供了重要启示,在全球化背景下将发挥更大作用。
guava Function Predicate Supplier
介绍下Guava中比较重要的几个类:Function、Predicate、Supplier 以及对应的工具类:Functions、Predicates、SuppliersFunctionFunction是一个接口,本质是用来做转换的。主要是用apply方法把input转换为另外一个对象。一般都是用匿名内部类的方式使用。源码如下:public interface Function<F, T> {
深度学习工具包 DeepLearningToolbox
深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[](https://bitdeli.com/free "Bitdeli Badge")
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
Guava Function Predicate 类函数式编程
最近在学习使用guava, 一个非常优秀的开源项目,是对jdk一个非常有力的补充,我看上guava的是能使代码更简洁,良好的代码风格 首先来介绍一下com.google.common.base包中的常用类 1 Function guava提供了类函数式的编程,其中的代码就是提供了Function, Predicate接口,及工具类Functions, Predicat...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
java Guava funtion_guava学习--Function、Predicate
Function用于同步转换。Predicate用于过滤。import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Map;import com.google.common.base.Function;import com.google.common.base.Funct...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
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...
guava学习--Function、Predicate
Function用于同步转换。 Predicate用于过滤。 import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import com.google.common.base.Function; import com.go...
【Java8】Guava——Predicate
PredicateGuava@FunctionalInterface @GwtCompatible public interface Predicate<T> extends java.util.function.Predicate<T> { @CanIgnoreReturnValue boolean apply(@Nullable T input); @Override boolea
Guava源码学习笔记
学习和使用Guava可以使自己的代码变得更加优雅、简洁。 Know and use the libraries, don’t reinvent the wheel.
Google Guava学习笔记
Java Collection Framework的增强工具类Google Guava Collection 使用这个工具包的主要原因是为了当使用collection等类处理复杂逻辑的时候,可以使用Guava collection帮助完成这些工作。使得代码等短,代码质量更高,同时更容易阅读和修改。 功能举例: Multiset: 能够把重复的元素放入一个集合,并且可以统计元素数量
光伏早晚低功率无功补偿越补越乱?低成本改造方案与参数优化
在分布式光伏系统中,功率因数波动与无功补偿投切震荡是常见电能质量问题,其原理在于光伏出力随辐照度变化导致逆变器无功输出与传统补偿柜控制逻辑错配。通过启用逆变器无功曲线、优化补偿柜投切延时与门限,可显著提升功率因数稳定性,降低设备动作频次,延长电容器寿命。该方案适用于工商业屋顶光伏、光储融合等场景,以极低成本解决早晚时段功率因数考核罚款问题,实现无功功率的平滑调节与协调控制。
Predicate接口介绍
Predicate接口介绍
使用Guava进行函数式编程
本文翻译自Getting Started with Google Guava这本书,如有翻译不足的地方请指出。 在这一章,我们开始注意到使用Guava进行编写代码会更加简单。我们将看看如何使用Guava当中的接口和类可以帮助我们,通过应用行之有效的模式,以使我们的代码更容易维护以及健壮。 在本章中我们将包含一下几点: Function接口:这说明在java编程当中可以引入函
Guava的Collections2:过滤和转换Java集合
Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java,这是本文的主题。 Guava的Collections2类具有两个公共方法,这两个方法都是静态的。 方法filter(Collection,Predicate)和transform(Collection,Function)的作用含义是:分别对给定的集合执行...
Guava 常用 API
super F,?super T> predicate):Iterables类中的tryFind方法,用于找出集合中满足条件的元素,其中传入的第二个参数就是Predicate方法。Splitter 使用示例,下面的 iterable 就是包含了所有被分隔的字符串,同时,onPattern 方法是指传入正则表达式,与正则相匹配的都会被分隔。Collections.unmodifiableXXX方法是视图映射,用该方法生成的集合虽然不能更改,但是用集合更改之后这些集合也会对应的更改。
583



被折叠的 条评论
为什么被折叠?



