javaStream流学习

Stream

Java8 API添加了一个新的抽象称为流 Stream ,可以让

你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直

观方式来提供一种 Java 集合运算和表达的高阶抽

。Stream API可以极大提高Java程序员的生产力,让

程序员写出高效率、干净、简洁的代码。这种风格将要

处理的元素集合看作一种流, 流在管道中传输, 并且可

以在管道的节点上进行处理, 比如筛选, 排序,聚合

等。

元素流在管道中经过中间操作(intermediate

operation)的处理,最后由最终操作(terminal

operation)得到前面处理的结果。

Stream(流)是一个来自数据源的元素队列并支持聚合

操作

元素是特定类型的对象,形成一个队列。 Java中的

Stream并不会存储元素,而是按需计算

数据源 流的来源。 可以是集合,数组等。

聚合操作 类似SQL语句一样的操作, 比如filter, map,

reduce, find, match, sorted等。Java 8 中的 Stream 是对集合(Collection)对象功能的

增强,它专注于对集合对象进行各种非常便利、高效的

聚合操作(aggregate operation),或者大批量数据操作

(bulk data operation)。

获取流

  1. 可以通过Conllection系列集合提供的顺序

    流stream()或并行流parallelStream()

    public class TestStreamAPI1 { 
    // 创建
    Stream public void test1() { 
    // 1、可以通过Conllection系列集合提供的顺序 流stream()或并行流parallelStream() 
    List<String> list = new ArrayList<>(); Stream<String> stream1 = list.stream(); 
    stream1 = list.parallelStream(); 
    // 2、通过Arrays中的静态方法stream()获取数 据流 Integer ints[] = new Integer[10]; Stream<Integer> stream2 = Arrays.stream(ints); // 3、通过Stream类中的静态方法of() 
    Stream<String> stream3 = Stream.of("aa", "bb", "cc"); 
    String str[] = new String[10]; Stream<String> stream4 = Stream.of(str) } }
    
  2. 通过Arrays中的静态方法stream()获取数

    据流

    package com.lwf.homeWork;
    
    import java.util.Arrays;
    
    /**
     * @author lwf
     * @title: StreamWork
     * @projectName 10_24Code
     * @description: TODO
     * @date 2020/10/2515:35
     */
    public class StreamWork {
        public static void main(String[] args) {
            printAbs(new int[]{2,-5,6,-2,0,-6});
            printPow(new int[]{2,-5,6,-2,0,-6});
        }
        //打印绝对值
        public static void printAbs(int[] num){
            Arrays.stream(num).map(n->Math.abs(n)).forEach(System.out::println);
        }
        //打印平方
        public static void printPow(int[] num){
            Arrays.stream(num).map(n->n*n).forEach(System.out::println);
        }
    }
    
    
  3. 通过Stream类中的静态方法of()

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4gz8ZCEt-1603616308346)(https://raw.githubusercontent.com/lwfqw/shsxt/master/10_24Code/img/image-20201025162946815.png)]

过滤流

fiter过滤

传入一个转化为流的容器存放对象,返回一个布尔值判断是否加入流

package com.lwf.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author lwf
 * @title: Demo1
 * @projectName 10_24Code
 * @description: 流过滤懒执行:获取结果时才执行
 * @date 2020/10/2411:10
 */
public class Demo1 {
    public static void main(String[] args) {
        List<Panda> list=new ArrayList<>();
        list.add(new Panda(1,"jxa","cd"));
        list.add(new Panda(2,"jxs","cd"));
        list.add(new Panda(3,"jxd","sh"));
        list.add(new Panda(4,"jxf","cd"));
        list.stream().filter(r->r.getLocate().equals("cd")).limit(3).skip(0).forEach(c-> System.out.println(c));
        System.out.println(list.parallelStream().findAny().get());
    }
}

limit(n)

指定流前n条数据

skip(n)

跳过前n条数据

distinct()

去重复

map()

传入一个方法接口,接口处理接收对象提取对象特定信息加入新的流

foreach(System.out::println)

遍历打印流

count()流长度

package com.lwf.homeWork;

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

/**
 * @author lwf
 * @title: Goods
 * @projectName 10_24Code
 * @description: TODO
 * @date 2020/10/2515:48
 */
public class Goods {
    public static void main(String[] args) {
        List<Goods> list=new ArrayList<>();
        list.add(new Choes(12, "adidas", Type.choes));
        list.add(new Phone(43, "huawei", Type.phone));
        list.add(new Phone(66, "chenguang", Type.pen));
        list.add(new Choes(19, "nike", Type.choes));
        list.add(new Choes(18, "nike", Type.choes));
        list.add(new Phone(49, "xiaomi", Type.phone));
        list.add(new Choes(34, "huili", Type.choes));
        list.add(new Phone(36, "meizu", Type.phone));
        list.add(new Choes(7, "hailan", Type.choes));
        //鞋子销量排行
        list.stream().filter(g->g.getType()==Type.choes).sorted((o,a)->{
            return Integer.compare(o.getSell(), a.getSell());
        }).forEach(System.out::println);
        //手机产品
        list.stream().filter(g->g.getType()==Type.phone).forEach(System.out::println);
        //几种鞋子
        System.out.println(list.stream().filter(g -> g.getType() == Type.choes).map(g -> g.getName()).distinct().count());
    }
    private int sell;
    private String name;
    private Type type;

    public Goods(int sell, String name, Type type) {
        this.sell = sell;
        this.name = name;
        this.type = type;
    }

    public int getSell() {
        return sell;
    }

    public void setSell(int sell) {
        this.sell = sell;
    }

    public String getName() {
        return name;
    }

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

    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }

    @Override
    public boolean equals(Object obj) {
        Goods goods = (Goods)obj;
        return this.getName().equals(goods.getName());
    }

    @Override
    public String toString() {
        return "Goods{" +
                "sell=" + sell +
                ", name='" + name + '\'' +
                ", type=" + type +
                '}';
    }
}
enum Type{
    phone,choes,pen;
}
class Phone extends Goods{
    public Phone(int sell, String name, Type type) {
        super(sell, name, type);
    }
}
class Choes extends Goods{
    public Choes(int sell, String name, Type type) {
        super(sell, name, type);
    }
}
class Pen extends Goods{
    public Pen(int sell, String name, Type type) {
        super(sell, name, type);
    }
}

流是懒加载,所以对流无论进行多少次操作都会取结果时一起打印·(foreach和count)

全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
10-19 10:28
已编辑
西南石油大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9&nbsp;投递9.10&nbsp;一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11&nbsp;二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14&nbsp;一面(无八股,主动说确实很强,意愿很强)10.16&nbsp;oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务