1. 使用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));
    } }
  2. 使用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
  3. 指定跳过多少个数据 类似 于 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
  4. 取一个集合的前几条数据

    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
  5. 使用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集合)的更多相关文章

  1. java1.8新特性之stream流式算法

    在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ...

  2. Stream:java1.8新特性

    原 Stream:java1.8新特性 2017年08月01日 18:15:43 kekeair-zhang 阅读数:392 标签: streamjava1-8新特性 更多 个人分类: 日记 版权声明 ...

  3. java1.8新特性(一)

    一直在更新java 版本,原来也没有关注java版本的变化 引入的一些新的api  引起注意的还是  关于一些并发包的使用,那时候才对每个版本的特性 去了解了一下,虽然 不一定都用上了,但是不管学习什 ...

  4. java1.8新特性整理(全)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yitian_66/article/deta ...

  5. java1.8新特性

    转自:http://www.oschina.NET/translate/everything-about-Java-8 建议去看原文,此处转载只是为了记录. 这篇文章是对Java8中即将到来的改进做一 ...

  6. Servlet3.0新特性WebFilter(Annotation Filter)详解

    摘要: Servlet3.0作为J2EE 6规范一部分,并随J2EE6一起发布,WeFilter是过滤器注解,是Servlet3.0的新特性,不需要在web.xml进行配置,简化了配置. Name T ...

  7. java8新特性五-Stream

    继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式. Java 8 A ...

  8. java1.7新特性:try-with-resources

    转载:https://blog.csdn.net/fanxiaobin577328725/article/details/53067163 首先看代码: import org.junit.Test; ...

  9. Java1.8新特性 - Stream流式算法

    一. 流式处理简介   在我接触到java8流式数据处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包 ...

随机推荐

  1. EasyUI datagrid easyui datagrid +dialog 加载 可直接运行 七

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...

  2. MySQL安装配置错误\日常使用错误

    1.出现报错---应用程序无法正常启动0xc000007b 安装direct 9.0 安装vc++ 2005 安装vc++ 2008 安装vc++ 2012(x64和x86都要装) 安装 .NET4. ...

  3. LA3510 Pixel Shuffle

    题意 PDF 分析 思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用\(O(n^2k)\)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A ...

  4. SpringMvc和Mybatis整合总结

    1.先配置mybatis,测试读取数据库 2.自己测试数据 3.配置spring和springmvc, PS:配置web.xml,这样就不用getBean了 4.配置Controller 5.前后台交 ...

  5. tomcat部署项目(war文件)

    首先配置jdk环境 下载jdk 例如,我将jdk安装在d盘jdk目录下 配置系统环境 新建系统变量JAVA_HOME值为D:\jdk 新建系统变量CLASS_HOME值为 .%JAVA_HOME%\l ...

  6. day5 python学习

    本日主要讲了列表的一些操作 1.列表的增 ret=['wang','taibai','alxe','ritian'] ret.append("wusir") print(ret) ...

  7. Gravitee.io docker-compose运行

    Gravitee.io 是一个相对比较完整的api gateway 平台,包含了api 相对比较完整的生命周期管理 同时在访问控制以及日志监控上也做的比较好,是一款可以尝试试用的api gateway ...

  8. S老师 破坏神学习

    代码质量不高 就不整理了 发上来留个纪念 表示自己写过了 数据库:MySQL,服务端:PhotonServer 视频:https://pan.baidu.com/s/1i4ROaRr 客户端:http ...

  9. 我对 前端 Js 开发方式 架构方向 的 一些看法

    有 网友 提到 : “复杂的页面,一个页面加载的模块多,各种异步请求,页面渲染,jquery链式编程操作dom数过于频繁.现在的前台越来越复杂,逻辑臃肿.” 哎, 所以 我说, 要改成用 同步调用 . ...

  10. 代理模式proxy

    代理模式的共同优点如下: (1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度. (2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵 ...