美文网首页
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(面向函数编程)

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