文档章节

Java|Java8的流式数据

猫咪要感冒
 猫咪要感冒
发布于 2017/04/15 22:39
字数 660
阅读 58
收藏 0

Java8新特性:流式操作

实体类

public class Student {
    private long id;
    private String name;
    private int age;
    private int grade;
    private String major;
    private String school;
    // 省略getter和setter
}

数据初始化

List<Student> students = new ArrayList<Student>() {
    {
        add(new Student(20160001, "孔明", 20, 1, "土木工程", "武汉大学"));
        add(new Student(20160002, "伯约", 21, 2, "信息安全", "武汉大学"));
        add(new Student(20160003, "玄德", 22, 3, "经济管理", "武汉大学"));
        add(new Student(20160004, "云长", 21, 2, "信息安全", "武汉大学"));
        add(new Student(20161001, "翼德", 21, 2, "机械与自动化", "华中科技大学"));
        add(new Student(20161002, "元直", 23, 4, "土木工程", "华中科技大学"));
        add(new Student(20161003, "奉孝", 23, 4, "计算机科学", "华中科技大学"));
        add(new Student(20162001, "仲谋", 22, 3, "土木工程", "浙江大学"));
        add(new Student(20162002, "鲁肃", 23, 4, "计算机科学", "浙江大学"));
        add(new Student(20163001, "丁奉", 24, 5, "土木工程", "南京大学"));
    }
};

一、过滤

filter 

Stream<T> filter(Predicate<? super T> predicate),filter接受一个谓词Predicate。通过这个谓词定义筛选条件。现在从集合students中筛选出所有武汉大学的学生,通过filter来实现,并将筛选操作作为参数传递给filter:

List<Student> whuStudents = students.stream()
                                    .filter(student -> "武汉大学".equals(student.getSchool()))        
                                    .collect(Collectors.toList());

distinct

distinct类似于SQL语句的DISTINCT关键字,用于去重处理,distinct基于Object.equals(Object)实现。筛选一个“aaa”,添加distinct操作:

 List<String> strings = new ArrayList<String>();
 strings.add("aaa");
 strings.add("bbb");
 strings.add("ccc");
 strings.add("ddd");
 strings.add("aaa");
 List<String> rst = strings.stream()
                           .filter(string->"aaa".equals(string))
                           .distinct()//类似sql的distict关键字
                           .limit(1)//类似sql的limit关键字
                           .skip(1)//有排序的功能
                           .collect(Collectors.toList());
 System.out.println(rst.size());

limit

limit类似于SQL语句的LIMIT关键字,不过相对功能较弱,limit返回包含前n个元素的流,当集合大小小于n时,则返回实际长度。返回前两个专业为土木工程专业的学生:

List<Student> civilStudents = students.stream()
                                    .filter(student -> "土木工程".equals(student.getMajor()))
                                    .limit(2)
                                    .collect(Collectors.toList());

sorted

该操作用于对流中元素进行排序。sorted要求待比较的元素必须实现Comparable接口,如果没有实现也不要紧,我们可以将比较器作为参数传递给sorted(Comparator<? super T> comparator)。筛选出专业为土木工程的年龄最小的两个学生:

List<Student> sorted = students.stream()
        .filter(student -> "土木工程".equals(student.getMajor()))
        .sorted((s1, s2) -> s1.getAge() - s2.getAge())
        .limit(2)
        .collect(Collectors.toList());

skip

跳过前n个元素,如果n大于满足条件的集合的长度,则会返回一个空的集合。找出排序在2之后的土木工程专业的学生:

List<Student> civilStudents = students.stream()
                                .filter(student -> "土木工程".equals(student.getMajor()))
                                .skip(2)
                                .collect(Collectors.toList());

二、查询

三、归约

 

© 著作权归作者所有

共有 人打赏支持
猫咪要感冒
粉丝 6
博文 22
码字总数 16868
作品 0
合肥
程序员
私信 提问
stream in java8

如果使用过scala,使用scala函数编程思想处理数据,那酸爽谁用谁知道。使用java老觉得不得劲,但java8借用了scala的思想,引入了函数编程思想,那就是stream,随后我们慢慢体验她的妙处。 Ja...

jacksu在简书
2018/01/30
0
0
Java8 Lambda表达式.md

为了支持函数式编程,Java 8引入了Lambda表达式. 在Java 8中采用的是内部类来实现Lambda表达式.具体实现代码,可以通过debug看, 同时通过字节码查看工具及反编译工具来验证. 自从lambda表达式...

程序员诗人
2017/02/25
0
0
【java8】java新特性(二)——lambda表达式

一,前言 在上一篇博客中,小编向大家抛转引玉,简单说明了[ Java8 ](http://blog.csdn.net/kisscatforever/article/details/79572194 ),其实Java 8在2014年3月18日,就发布了。可以说程序...

kisscatforever
2018/03/20
0
0
第一章 为什么要关心java8

一、java怎么还在变 1、java在编程语言生态系统中的位置 java虚拟机(JVM)及其字节码可能会变得比java语言本身更重要,而且对于某些应用来说,java可能会被同样运行在JVM上的竞争对手(如S...

一个yuanbeth
2018/09/25
0
0
把 Java 8 流解析成 SQL

当我们尝试用“Java 8 的方式”使用数据库时,如何去解决性能上的问题呢? 通过与 ZeroTurnaround 合作,我们为你带来了 Java Zone。你可以阅读这里的 8 个步骤的指南,来看看如何在编写代码...

oschina
2015/12/28
7.4K
35

没有更多内容

加载失败,请刷新页面

加载更多

分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0
android自定义viewgroup画背景

设计部要求背景实现一个背景边框带圆弧的效果: 所以想着用自定义控件画一个背景。 为了方便,继承的是LinearLayout,在onMeasure中先获取控件宽高: @Overrideprotected void onMeasure(in...

醉雨
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部