<JAVA8新增内容>关于集合的操作(Collection/Iterator/Stream)
因为下文频繁使用lambda表达式,关于Java中的lambda表达式内容请见:
http://www.cnblogs.com/guguli/p/4394676.html
一.使用增强的Iterator遍历集合元素
Iterator接口也是Java集合框架的成员,但它与Collection系列,Map系列的集合不一样:Collection系列集合,Map系列集合主要用于承装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。
Iterator接口隐藏了各种Collection实现类的底层细节,向应用程序提供了遍历Collection集合元素的统一编程接口,Iterator接口里面一般定义了下面4个方法。
boolean hasNext():返回表示集合元素是否有没有被访问完的布尔值。
Object next():返回集合里的下一个元素。
void remove():删除集合里上一次next方法返回的元素。
void forEachRemaining(Consumer action):这是Java8为Iterator新增的默认方法,该方法可使用lambda表达式来遍历集合元素。
public class IteratorTest{
public static void main(String[] args){
....//c is a Collection<String>
Iterator iter=c.iterator();
while(iter.hasNext()){
String s=(String)iter.next();
System.out.println(s);
if(s.equals("Content")){
iter.remove();
}
s="New Content";
}
System.out.println(s);
}
}
##Iterator仅用于遍历集合,Iterator本身并不提供承装对象的能力。
##Iterator必须依附于Collection对象,若有一个Iterator对象则必然有个与之关联的Collection对象。
##Iterator迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中的其他线程修改),程序立即抛出ConcurrentModificationException异常,而不是显示修改后的结果,这样可以避免共享资源而引发潜在的问题。
二.使用Java8新增的Predicate操作集合
Java8为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将会批量删除符合filter条件的所有元素,该方法需要一个Predicate对象作为作为参数,Predicate也是函数式接口,因此可使用Lambda表达式作为参数。
...
Collection c=new HashSet();
c.add(new String("Content 1"));
c.add(new String("Content 2"));
c.add(new String("Content 3"));
/// lambda expression
c.removeIf(s->((String)s).length()<10);
System.out.println(c);
使用Predicate可以充分简化集合的运算,使用lambda表达式使整个程序简介清晰。也可以使用callAll方法用一个Predicate类型的lambda表达式来进行全部筛选,类似于SQL语言中的select*。
三.使用Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等数据流处理的API,这些API代表多个支持串行和并行聚集操作的元素,上面4个接口中,Stream是一个通用的接口,而其他的**Stream接口则代表元素类型为Int/Double/Long的流。
Java8为上面每个流接口提供了对应的Builder,例如Stream.Builder..开发者可以使用这些Builder来创建对应的流。步骤如下:
##使用Stream或者**Stream的builder()类方法创建该Stream对应的Builder。
##重复调用Builder的add()方法向该流中添加元素。
##调用Builder的build()方法获取对应的Stream
##调用Stream的聚集方法
关于Stream的聚集操作,主要罗列解释如下(先解释两个概念##):
##intermediate(中间方法):中间操作允许流保持打开的状态,并允许直接调用后续方法
##terminal(末端方法):末端操作时对流的最终操作,当对某个Stream执行末端方法后,该流将无法继续使用
/////// Intermediate
(1)filter(Predicate p):返回全部使Predicate返回true的元素。
(2)mapToXxx(ToXxxFunction mapper):对每一个流中的元素按复写ToXxxFunction的方法进行一对一的转换。
(3)peek(Consumer c):类似于forEach操作。返回流于原有流包含相同的元素。该方法主要用于调试。
(4)distinct():该方法用于排序流中所有重复的元素。
(5)sorted():该方法用于保证流中的元素在后续的访问中处于有序的状态。
(6)limit(long maxSize):该方法用于保证对流的后续元素访问中最大允许访问的元素个数。
/////// Terminal
(1)forEach(Consumer c):遍历元素对每一个元素执行c操作。
(2)toArray():将流中的所有元素转换成为一个数组。
(3)reduce():合并流中的元素。
(4)min():返回流中的最小的元素。
(5)max():返回流中的最大的元素。
(6)count():返回流中的元素的数量。
(7)anyMatch(Predicate p):判断流中是否至少包含一个元素符合p。
(8)noneMatch(Predicate p):判断流中是否没有包含一个元素符合p。
(9)allMatch(Predicate p):判断流中是否所有元素都符合p。
(10)findAny():返回流中的任意一个元素。
<JAVA8新增内容>关于集合的操作(Collection/Iterator/Stream)的更多相关文章
- Java8新增的这些集合骚操作,你掌握了嘛?
目录 Iterable的forEach Iterator的forEachRemaining Collection的removeIf Stream操作 List的replaceAll List的sort ...
- java集合的操作(set,Iterator)
集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...
- <JAVA8新增内容>关于匿名内部集合和lambda表达式
要想说清楚JAVA中的Lambda表达式,必须想讲一下匿名内部类来帮助理解本质. 一.匿名内部类 匿名内部类适合创建那种只需要一次使用的类,例如前面介绍命令模式时所需要的Command对象,匿名内部类 ...
- java集合(3)-Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...
- 从零开始学 Web 之 HTML5(二)表单,多媒体新增内容,新增获取操作元素,自定义属性
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Java8 新特性之集合操作Stream
Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...
- java8 集合神操作
public class StreamUtils { private static final List<Integer> listInteger = Lists.newArrayList ...
- Java8之Stream 集合聚合操作集锦(含日常练习Demo)
Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找.遍历.过滤以及常 ...
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...
随机推荐
- linux中read用法
read在while中的经常用法: root@ubuntu:/var/lib/logrotate :: # cat /etc/cron.daily/logrotate #!/bin/sh # Clea ...
- Zabbix的前台SQL注射漏洞利用
今年8月份Map在wooyun上发了个Zabbix某前台SQL注射漏洞 ,11月份才公开. 漏洞详情大约是这样的: 在zabbix前端存在一个SQL注射漏洞,由于zabbix前台可以在zabbix的s ...
- Android4.0(Phone)拨号启动过程分析(一)
因为工作的须要.须要改动原生的Phone程序,如今就好好看下来电与拨号是怎样处理的:无论是拨号还是来电,调用的都是Phone程序,因为非常多类都涉及到framework层,比較复杂:先从简单的拨号分析 ...
- 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)
),请不要反复加群! 欢迎各位大牛,React Native技术爱好者增加交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送! 该DrawerLayoutAndroid组件封 ...
- 进程间通信(IPC)介绍(转)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息. IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量.共享存储.Socket ...
- 【Python】分析文本split()
分析单个文本 split()方法,是以空格为分隔符将字符串拆分成多个部分,并将这些部分存储到一个列表中 title = 'My name is oliver!' list = title.split( ...
- Oracle创建自增字段和修改方法-ORACLE SEQUENCE的简单介绍
http://blog.csdn.net/zhoufoxcn/article/details/1762351先假设有这么一个表: create table S_Depart ( DepartI ...
- 用Squid和DNSPod打造自己的CDN详细教程
本篇教程是顺应大家的要求而写.教程内大部分都是奶罩在为VeryCD等大型网站构建CDN时所累积的经验.在一些概念方面可能会有一些错漏,希望 大家指正. 本教程面对的对象是个人站长,所以各方面会力求傻瓜 ...
- 图片压缩CompressUtil解析
CompressUtil 流程图: CompressUtil 类 具体解释 public class CompressUtil { /** * 终于封装的压缩方法 * @param imgPath * ...
- RGB颜色空间alpha混合的方法
http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/64454 ...