java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)
- 使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户
package lambda.stream; 
 /**
 * @author 作者:cb
 * @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream; public class StreamDemo {
 public static void main(String[] args) {
 // 1.集合创建stream对象
 List<User> asList = Arrays.asList(new User("张三", 15), new User("李四", 25), new User("Tom", 10));
 Stream<User> streamList = asList.stream();
 // 找出 user age>15 的user collect(Collectors.toList()) 返回一个对应的集合
 List<User> collect = streamList.filter(user -> user.getAge() >= 15).collect(Collectors.toList());
 //集合提供的遍历方法。。打印user对象
 collect.forEach(user -> System.out.println(user));
 } }public interface Stream<T> extends BaseStream<T, Stream<T>> { /**
 * Returns a stream consisting of the elements of this stream that match
 * the given predicate.
 *
 * <p>This is an <a href="package-summary.html#StreamOps">intermediate
 * operation</a>.
 *
 * @param predicate a <a href="package-summary.html#NonInterference">non-interfering</a>,
 * <a href="package-summary.html#Statelessness">stateless</a>
 * predicate to apply to each element to determine if it
 * should be included
 * @return the new stream
 */
 Stream<T> filter(Predicate<? super T> predicate);Stream<T> filter(Predicate<? super T> predicate) 接受的是一个 predicate 类型的接口参数。predicate 有一个test 的抽象boolean类型的返回值方法。该方法满足条件age>=15 返回true 则程序 向下执行,执行结果: User [name=张三, age=15] 
 User [name=李四, age=25]为了方便 所以 该测试类 每个步骤分开写的,连着写: package lambda.stream; 
 /**
 * @author 作者:cb
 * @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream; public class StreamDemo {
 public static void main(String[] args) {
 // 1.集合创建stream对象
 List<User> asList = Arrays.asList(new User("张三", 15), new User("李四", 25), new User("Tom", 10));
 Stream<User> streamList = asList.stream();
 // 找出 user age>15 的user .collect(Collectors.toList()) 返回一个对应的集合
 // List<User> collect = streamList.filter(user -> user.getAge() >=
 // 15).collect(Collectors.toList());
 // 集合提供的遍历方法。。打印user对象
 // collect.forEach(user -> System.out.println(user));
 streamList.filter(user -> user.getAge() >= 15).collect(Collectors.toList())
 .forEach(user -> System.out.println(user));
 } }
- 使用stream distinct 去掉一个集合中的重复元素“:
package lambda.stream; 
 /**
 * @author 作者:cb
 * @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream; public class StreamDemo {
 public static void main(String[] args) {
 testDistinct();
 } /**
 * 去重
 */
 public static void testDistinct() {
 List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 8, 9, 7);
 List<Integer> collect = asList.stream().distinct().collect(Collectors.toList());
 collect.forEach(System.out::print);
 } }结果: 12356789 
- 指定跳过多少个数据 类似 于 for循环里面的break 例如: - package lambda.stream; 
 /**
 * @author 作者:cb
 * @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream; public class StreamDemo {
 public static void main(String[] args) {
 testSkp();
 } public static void testSkp() {
 List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
 List<Integer> collect = asList.stream().skip(5).collect(Collectors.toList());
 collect.forEach(System.out::print);
 }- 结果: - 789 
- 取一个集合的前几条数据 - package lambda.stream; 
 /**
 * @author 作者:cb
 * @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream; public class StreamDemo {
 public static void main(String[] args) {
 testLimit();
 } public static void testLimit() {
 List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
 List<Integer> collect = asList.stream().limit(5).collect(Collectors.toList());
 collect.forEach(System.out::print);
 }- 结果: - 12356 
- 使用map 將集合中的每个数字 扩大 两倍 :
package lambda.stream; 
 /**
 * @author 作者:cb
 * @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors; public class StreamDemo {
 public static void main(String[] args) {
 testMap();
 } public static void testMap() {
 List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
 List<Integer> collect = asList.stream().map(i -> i * 2).collect(Collectors.toList());
 collect.forEach(System.out::println);
 }结果: 2 
 4
 6
 10
 12
 14
 16
 18
6 .解决一个字符串数组 返回单一的字符串使用flatMap:
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
flatMap();
} public static void flatMap() {
List<String> list = Arrays.asList("AABBBACCDED", "EDADCAJIONG "); list.stream().flatMap(item -> Arrays.stream(item.split(""))).distinct().collect(Collectors.toList())
.forEach(System.out::printf);
结果:
ABCDEJIONG
关于 map 和 flatMap的区别,可以了解一下。这里记录一下自己的用法 毕竟写这些 主要是给自己看 怕自己哪天忘了 回头在看看

java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)的更多相关文章
- java1.8新特性之stream流式算法
		在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ... 
- Stream:java1.8新特性
		原 Stream:java1.8新特性 2017年08月01日 18:15:43 kekeair-zhang 阅读数:392 标签: streamjava1-8新特性 更多 个人分类: 日记 版权声明 ... 
- java1.8新特性(一)
		一直在更新java 版本,原来也没有关注java版本的变化 引入的一些新的api 引起注意的还是 关于一些并发包的使用,那时候才对每个版本的特性 去了解了一下,虽然 不一定都用上了,但是不管学习什 ... 
- java1.8新特性整理(全)
		版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yitian_66/article/deta ... 
- java1.8新特性
		转自:http://www.oschina.NET/translate/everything-about-Java-8 建议去看原文,此处转载只是为了记录. 这篇文章是对Java8中即将到来的改进做一 ... 
- Servlet3.0新特性WebFilter(Annotation Filter)详解
		摘要: Servlet3.0作为J2EE 6规范一部分,并随J2EE6一起发布,WeFilter是过滤器注解,是Servlet3.0的新特性,不需要在web.xml进行配置,简化了配置. Name T ... 
- java8新特性五-Stream
		继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式. Java 8 A ... 
- java1.7新特性:try-with-resources
		转载:https://blog.csdn.net/fanxiaobin577328725/article/details/53067163 首先看代码: import org.junit.Test; ... 
- Java1.8新特性 - Stream流式算法
		一. 流式处理简介 在我接触到java8流式数据处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包 ... 
随机推荐
- css实现两栏布局,左侧固定宽,右侧自适应的7中方法
			一个面试会问的问题,如何实现两个盒子,左侧固定宽度,右侧自适应. 1.利用 calc 计算宽度的方法 css代码如下: .box{overflow: hidden;height: 100px;marg ... 
- C++学习(二十七)(C语言部分)之 预处理命令
			结构体 联合 枚举 联合 只能保存最后赋值的结果枚举 所有可能值列出来 预处理命令是在编译前期的阶段 代码-(编译)-->可执行文件(exe)预编译 编译前对代码处理 *1.插入头文件的内容 # ... 
- 浅谈log4j-3-不同输出样式
			public static void main(String[] args) { Logger logger=Logger.getLogger(Appendable.class); //设置输出等级 ... 
- Go Example--限速
			package main import ( "fmt" "time" ) func main() { requests := make(chan int, 5) ... 
- ios-计算时间方法
			-(NSString *)countPublishTime:(NSString *)sDate { NSDate *dtNow = [NSDate date]; NSDateFormatter *da ... 
- 高性能kv存储之Redis、Redis Cluster、Pika:如何应对4000亿的日访问量?
			一.背景介绍 随着360公司业务发展,业务使用kv存储的需求越来越大.为了应对kv存储需求爆发式的增长和多使用场景的需求,360web平台部致力于打造一个全方位,适用于多场景需求的kv解决方案.目前, ... 
- wget命令的使用
			wget是在命令行下载文件的命令 -c 断点续传,用于大文件的下载或者网络不稳定的情况下,一般不写也可以 -P 指定下载到那个目录(是大写的P) 举例 [root@bogon local]# wget ... 
- Creating Modules
			转自官方文档,主要说明如何创建模块 https://www.terraform.io/docs/modules/index.html A module is a container for multi ... 
- sqler sql 转rest api 的docker image
			最新sqler 又发布了一个版本,同时官方文档也更新,对于数据库的连接有了详细的说明 Dockerfile 为了方便以及减少大小,使用多阶段构建,同时都通过环境变量运行 FROM alpine:lat ... 
- 为什么 PCB 生产时推荐出 Gerber 给工厂?
			为什么 PCB 生产时推荐出 Gerber 给工厂? 事情是这样的,有一天电工王工,画了一块 PCB,发给 PCB 板厂. 过了几天 PCB 回来了,一看不对呀,这里的丝印怎么少了,那里怎么多了几条线 ... 
