美文网首页
stream(面向函数编程)

stream(面向函数编程)

作者: luckXiaofei | 来源:发表于2018-08-24 14:44 被阅读0次

什么是Stream:

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。


Stream的方法-未截图全部

常用方法——示例:

import com.seebon.spfcore.entities.po.mysql.sys.User;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class T {
    class Dog{
        Integer id;
        String name;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Dog() {
        }

        public Dog(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    }

    @Test
    public void name() throws Exception {
        List<Dog> dogs=new ArrayList<>();
        Dog  dog1=new Dog(1,"灰灰");
        Dog  dog2=new Dog(2,"胖胖");
        Dog  dog3=new Dog(3,"糖糖");
        dogs.add(dog1);
        dogs.add(dog2);
        dogs.add(dog3);
    }
}

  • foreach

foreach是一个最终操作(没有对stream做最终操作,对它的其他操作是不会生效的),没有返回值

//输出所有 狗的名字
        dogs.stream().forEach(temp-> System.out.println(temp.getName()));
//花括号可以做更多操作      
        dogs.stream().forEach(temp->{
            System.out.println(temp.getName());
        });
//输出结果:
foreach-1灰灰
foreach-1胖胖
foreach-1糖糖
foreach-2灰灰
foreach-2胖胖
foreach-2糖糖
  • filter

//过滤掉名字叫灰灰的狗
        List<Dog> dogs2 = dogs.stream().filter(dog -> !dog.getName().equals("灰灰")).collect(Collectors.toList());
//collect() 也是一个最终操作,所以前面的过滤操作会生效
        dogs2.stream().forEach(dog -> System.out.println(dog.getName()));
//输出结果:
胖胖
糖糖

allMatch() 匹配查询集合中是否都符合条件,返回true/false
anyMatch() 匹配查询集合中是否存在符合条件的,返回true/false
count() 统计集合中数量
distinct() 去重复
………………
这样操作起来很直观,剩下的方法看到方法名基本就能知道他们的作用了,所以就不一一写到笔记了。

总结:

用stream操作集合,可以使代码看起来非常简洁,做自己想做的操作就OK,不用自己写迭代方面(内迭代)。
但是stream并不是没有性能开销,有时自己写迭代 运行会更快。
所以建议 如果对集合有两步以上的操作可以用stream。

相关文章

  • stream(面向函数编程)

    什么是Stream: Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。...

  • 面向指针编程(一)

    面向对象编程,面向设计模式编程(亦即设计模式),面向接口编程,面向模板编程(亦即泛型编程),面向函数编程(亦即函数...

  • Swift函数式编程

    什么是函数式编程 我们知道面向过程编程,面向对象编程,面向协议编程...大家听说过面向函数编程吗? 百度百科 函数...

  • python面向对象1

    编程思想 编程思想:面向过程编程(穷人思想)、函数式编程、面向对象编程(富豪) 面向过程编程: 算法和逻辑 函数式...

  • Python全栈之路系列之面向对象基础

    面向对象基本介绍 Python编程方式: 面向过程编程 面向函数编程 面向对象编程 名称定义: 如果函数没有在类中...

  • Stream API使用

    其他内容请参考Stream官方文档。 1.为什么引入Stream? Stream是Java函数式编程的主角。函数式...

  • python-day14

    一、面向对象编程 编程思想:1.面向对象编程 --> 算法,逻辑2.函数式编程 --> 函数3.面向对象编程 ...

  • Day-14 - 类和对象(2018-10-17)

    一、面向对象编程 编程思想: 面向过程编程 ---> 算法,逻辑(数学逻辑) 函数式编程 ---> 函数,模块 ...

  • 函数响应式编程概述

    什么是编程? 面向过程 vs 面向对象 命令式编程 vs 函数式编程 函数响应式编程 满足函数式的一些特性 面向离...

  • 2018-10-17类和对象

    1⃣️面向对象编程 编程思想:1.面向过程编程 ---> 算法、逻辑2.函数式编程 --> 函数3.面向对象编...

网友评论

      本文标题:stream(面向函数编程)

      本文链接:https://www.haomeiwen.com/subject/frebiftx.html