java函数式编程之Stream
来源:互联网 发布:js 数组元素 函数 编辑:程序博客网 时间:2024/06/05 18:35
filter()
描述:对集合进行过滤,返回一个符合特定条件的Stream。
源码:
Stream<T> filter(Predicate<? super T> predicate);
测试代码:
private List<User>userList = new ArrayList<>();@Beforepublic void init(){ userList.add(new User("zm",28, User.SexEnum.MALE)); userList.add(new User("zm1",38, User.SexEnum.FAMALE)); userList.add(new User("zm2",48, User.SexEnum.MALE));}@Testpublic void testFilter(){ //筛选出性别不为FAMALE的 Streamstream = userList.stream().filter(user -> user.getSex()!= User.SexEnum.FAMALE); logger.info(stream.collect(Collectors.toList()).toString());}
测试结果:
[User{name='zm', age=28, sex=MALE}, User{name='zm2', age=48, sex=MALE}]
map()
描述:根据当前集合经过处理,得到一个包含目标类型Stream。
源码:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
测试代码:
@Testpublic void testMap(){ Stream<String> stream = userList.stream().map(user -> user.getName()); logger.info(stream.collect(toList()).toString());}
用上面的用户列表,经过处理得到一个含用户名的Stream。
测试结果如下:
[zm, zm1, zm2]
mapToInt()
描述:根据一个集合,经过处理得到一个整数的IntStream。
源码:
IntStream mapToInt(ToIntFunction<? super T> mapper);
测试代码:
@Testpublic void testMapToInt(){ //得到含用户年龄的IntStream IntStream intStream = userList.stream().mapToInt(user -> user.getAge()); int[] ary = intStream.toArray(); logger.info(Arrays.toString(ary));}
测试结果:
[28, 38, 48]
mapToLong()
描述:参考mapToInt()
mapToDouble()
描述:参考mapToInt()
flatMap()
描述:取出集合里面包含的集合属性的集合的Stream。如:List< User>是源集合,每个User包含一个List< Car>集合, 此方法能取出每个User里面的carList组合到一起,返回一个Stream。更直观的参见测试代码。
源码:
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
测试代码:
@Beforepublic void init(){ List<Car>carList = Arrays.asList(new Car("X1","BMW"),new Car("Q3","AUDI")); userList.add(new User("zm",28, User.SexEnum.MALE,carList)); userList.add(new User("zm1",38, User.SexEnum.FAMALE,carList)); userList.add(new User("zm2",48, User.SexEnum.MALE,carList));}@Testpublic void testFlatMap(){ Stream<Car> stream = userList.stream().flatMap(user -> user.getCarList().stream()); List<Car>carList = stream.collect(toList()); logger.info(carList.toString());}
测试结果:
[Car{name='X1', type='BMW'}, Car{name='Q3', type='AUDI'}, Car{name='X1', type='BMW'}, Car{name='Q3', type='AUDI'}, Car{name='X1', type='BMW'}, Car{name='Q3', type='AUDI'}]
flatMapToInt()
描述:根据源Stream返回一个IntStream
源码:
IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);
测试代码:
@Testpublic void testFlatMapToInt(){ userList.forEach(user -> { user.setIntegerList(Arrays.asList(1,2,3)); }); IntStream intStream = userList.stream().flatMapToInt(user -> IntStream.of(user.getAge())); intStream.forEach(age ->{ logger.info(age+""); });}
测试结果:
一月 07, 2017 10:22:58 下午 com.zm.demo.StreamTest lambda$testFlatMapToInt$6信息: 28一月 07, 2017 10:22:58 下午 com.zm.demo.StreamTest lambda$testFlatMapToInt$6信息: 38一月 07, 2017 10:22:58 下午 com.zm.demo.StreamTest lambda$testFlatMapToInt$6信息: 48
flatMapToLong()
描述:参考flatMapToInt()
flatMapToDouble()
描述:参考flatMapToInt()
distinct()
描述:去除重复的元素
源码:
Stream<T> distinct();
测试代码:
@Testpublic void testDistinct(){ List<Integer> list = Stream.of(1,5,3,2,1,5,3,4).distinct().collect(Collectors.toList()); logger.info(list.toString());}
测试结果:
[1, 5, 3, 2, 4]
sorted()
描述:按自然顺序排序
源码:
Stream<T> sorted();
测试代码:
@Testpublic void testSorted(){ List<Integer> list = Stream.of(1,5,3,2,1,5,3,4).sorted().collect(Collectors.toList()); logger.info(list.toString());}
测试结果:
[1, 1, 2, 3, 3, 4, 5, 5]
待续。。。
0 0
- java函数式编程之Stream
- JAVA 函数式编程学习之Stream API
- Java8函数式编程之六 :Stream (流)介绍
- 函数式编程----stream.js
- Stream API函数式编程
- 【转】JAVA8-Stream弥补函数式编程
- 函数式编程 流Stream的使用
- Java8函数式编程之七:Stream(流)的各种操作
- Java 8函数式编程笔记(二)- 集合和流(stream)
- JAVA 8函数式编程(六):怎样复用Stream对象
- 【Java没基础】函数式编程——Stream API 中的收集器
- java8新特性 lambda Stream map(函数式编程)
- Java1.8新特性 Lambda/Stream/函数式编程
- java8新特性 lambda Stream map(函数式编程)
- java8新特性 lambda Stream map(函数式编程)
- java函数式编程之lambda表达式
- java函数式编程之Predicate
- java函数式编程之Consumer
- 4-1 Iterative Mergesort
- 通过iw命令获取连接到路由器上的设备MAC地址
- 用flask开发个人博客(31)——用flask_login管理用户的登录
- 简单排序:选择排序
- 火狐浏览器必备的一些Hack插件
- java函数式编程之Stream
- (知乎)人工神经网络中的activation function的作用具体是什么?ReLu的特点?
- Struts2框架学习 Day1
- 2016年终总结
- ztree --授权问题(根据ids) setting checked tree
- tomcat下禁用不安全的http方法
- Oracle优化05-执行计划
- Python算法实践——AC自动机
- 文章标题