天天学JAVA-JAVA基础(5)

16 篇文章 1 订阅

如果觉得我写的还行,请关注我的博客并且点个赞哟。本文主要介绍JAVA Stream 流相关知识,通过阅读本文,你将掌握Stream的基本用法。
如果不知道Stream是什么,请阅读博文天天学JAVA-JAVA基础(2)这篇文章。

1.流的常用创建方法有以下四种
2.Stream具体用法
3.一道阿里面试题,你会做吗?

1. 流的常用创建方法有以下四种

package com.cy.lambda.learning;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Stream;

/**
 * cy
 *
 */
public class CreateStreamDemo {
    public static void main(String[] args) {
        //1.使用Collection下的 stream() 和 parallelStream() 方法
        List<String> list = new ArrayList<String>();
        Stream<String> stream  =list.stream();//创建一个串行流
        Stream<String> parallelStream  =list.parallelStream();//创建一个并行流

        //2.使用Arrays 中的 stream() 方法,将数组转成流
        String[] nums = new String[10];
        Stream<String> alist = Arrays.stream(nums);

        //3.使用Stream中的静态方法:of()、iterate()、generate
        //of
        Stream<Integer> streamk = Stream.of(1,2,3,4,5,6);
        //iterate
        Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 2).limit(6);
        stream2.forEach(System.out::println); // 0 2 4 6 8 10
        //generate
        Stream<Double> stream3 = Stream.generate(Math::random).limit(2);
        stream3.forEach(System.out::println);
        
        //4.使用 Pattern.splitAsStream() 方法,将字符串分隔成流
        Pattern pattern = Pattern.compile(",");
        Stream<String> stringStream = pattern.splitAsStream("a,b,c,d");
        stringStream.forEach(System.out::println);
    }
}

2.Stream具体用法
1.筛选和切片

package com.cy.lambda.learning;

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

/**
 * cy
 * 流的筛选与切片
 */
public class FilteringAndSlicingDemo {

    public static void main(String[] args) {

        //数据初始化
         List<Integer>  list =  new ArrayList<>();
         list.add(1);
         list.add(3);
         for (int i = 0; i < 10 ;i ++){
             list.add(i);
             //System.out.println(i);
         }

         //filter:过滤流中的某些元素
        list.stream().filter(s -> s<3)   //1,1,2
                .forEach(System.out::print);
        // limit(n):获取n个元素
        list.stream().limit(3)
                .forEach(System.out::print);
        //skip(n):跳过n元素,配合limit(n)可实现分页
        list.stream().skip(2).forEach(System.out::print);
        //distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
        list.stream().distinct().forEach(System.out::print);

        //综合
        list.stream().filter(s -> s<=6)
                     .distinct()
                     .skip(2)
                      .limit(3).forEach(System.out::print;);
    }
}

2.映射

package com.cy.lambda.learning;

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

public class MappingDemo {
    public static void main(String[] args) {
//map(Function f)	接受一个函数作为参数,
//并将函数应用到每一个元素上,返回新的元素
//        mapToDouble(ToDoubleFunction f)	返回的新元素为double类型
//        mapToInt(ToIntFunction f)	返回的新元素为int类型
//        mapToLong(ToLongFunction f)	返回的新元素为long类型
//        flatMap(Function f)	操作多层嵌套的流,使其扁平化

        List<Integer> list =  new ArrayList<>();
        list.add(1);
        list.add(3);
        for (int i = 0; i < 10 ;i ++){
            list.add(i);
            //System.out.println(i);
        }
        //接受一个函数作为参数,并将函数应用到每一个元素上,返回新的元素
        System.out.println("int :");
        list.stream().map(s -> s.intValue());
        //返回的新元素为double类型
        list.stream().mapToDouble(s -> s.intValue());
        // mapToInt(ToIntFunction f)	返回的新元素为int类型
        list.stream().mapToInt(s -> s.intValue());
        //mapToLong(ToLongFunction f)	返回的新元素为long类型
        list.stream().mapToLong(s-> s).forEach(System.out::print);
        //flatMap(Function f)	操作多层嵌套的流,使其扁平化
        list.stream().flatMap(s ->{
            Stream<String> stream =  Stream.empty();
            return stream;
        });
    }
}

3 排序

package com.cy.lambda.learning;

import java.util.Arrays;
import java.util.List;

/**
 * cc程序员
 *
 */
public class StreamSortDemo {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("aa", "ff", "dd","bb");
        //sorted 产生一个新流,其中按自然顺序排序
        list.stream().sorted().forEach(System.out::print);
        System.out.println();
        People people  =  new People("111",11,"1");
        People people1  =  new People("113",13,"1");
        People people2  =  new People("115",13,"1");
         //
        List<People> list1 =   Arrays.asList(people,people1,people2);
        list1.stream().sorted(
                (p1,p2)  ->{
                    if(p1.getUserNaMme().equals(p2.getUserNaMme())){
                        return  p1.getAge() - p2.getAge();
                    }else {
                        return   p1.getUserNaMme().compareTo(p2.getUserNaMme()) ;
                    }
                }
        ).forEach(s ->{
            System.out.println(s.toString());
        });
    }
}
class  People{
    private   String userNaMme;
    private   Integer age;
    private   String  sex;

    public People(String userNaMme, Integer age, String sex) {
        this.userNaMme = userNaMme;
        this.age = age;
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getUserNaMme() {
        return userNaMme;
    }

    public void setUserNaMme(String userNaMme) {
        this.userNaMme = userNaMme;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "People{" +
                "userNaMme='" + userNaMme + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

今天的代码分享就到这里了,上面的例子代码已经上传至github上stream实例,有需要的可以下载下来运行。下面分享一道来自阿里的面试题。

3.有一个类B继承自类A,他们数据成员如下:

class A {
...
privateint &a;
};
class B : public A {
...
private:
     int a;
public:
     const int b;
     A c;
     static const char* d;
     A* e;
};

则构造函数中,成员变量一定要通过初始化列表来初始化的是____。

A. b c
B.b c e
C.b c d e
D.c e
E.b d
F.b e

如果你想知道答案或者你知道答案,请留言或者关注下方公众号,并且回复1029,将会得到答案和解析哟。

如果你觉得我写的还行,请关注我的博客并且点个赞哟,也请关注我的公众号并加入下方QQ群,每天都会定时推送干货以及共享一些优质的学习资料和视频哟.
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿越清华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值