java项目总结7

目录

1.不可变集合

2.Stream流:

1.如何获取Stream流?

数组获取:

双列集合获取:

零散数据获取:

2.Stream流的中间方法

1.过滤

2.limit获取前几个元素

3.skip跳过前几个元素

4.元素去重distinct

5.concat合并a和b两个流为一个流

6.转换流中的数据类型

3.Stream流的终结操作

1.遍历​编辑

2.统计

3.收集流中的数据,放到数组中

4.收集方法collect超详解

1.收集到List集合中

2.收集到Set集合中

3.收集到Mapt集合中

5.实战演练

1.数字过滤

2.字符串过滤并收集

3.自定义对象过滤并收集


1.不可变集合

不可变集合:不可以被修改的集合

 List<String> list = List.of("aaa", "bbb", "ccc");

2.Stream流:

流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算。

1.如何获取Stream流?

单列集合获取,双列集合获取,数组获取,零散数据获取。

例子:减少操作步骤,一步到位

这里是将“张”改成a的代码:(单列集合)

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"ad","af","aby","adh","fjd");
    list.stream().filter(a->a.startsWith("a")).filter(a->a.length()==3).forEach(System.out::println);
    }
}

数组获取:

双列集合获取:

第一种输出为:

aaa
bbb
ccc
ddd

第二种输出为:

aaa=111
ccc=333
ddd=444
bbb=222
零散数据获取
Stream.of(1,2,3,4).forEach(s->System.out.println(s));

细节:(零散数据)

2.Stream流的中间方法

注意:合并流的时候尽量两个流基本数据结构一样

1.过滤

获取“张”开头数据(Predicate为函数式接口,所以可以用Lambda表达式)

2.limit获取前几个元素
          list.stream().limit(3).forEach(s->System.out.println(s));
3.skip跳过前几个元素
          list.stream().skip(3).forEach(s -> System.out.println(s));
4.元素去重distinct
5.concat合并a和b两个流为一个流

尽可能让两个数据类型一致,否则就是a和b狗共同的父类了,这样相当于做了数据类型的提升,提升之后是无法使用子类里面特有的功能的

  ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张ad","刘df","张ty","周kdh","fjd");
 
        ArrayList<String> list2=new ArrayList<>();
        Collections.addAll(list,"a","b","c","d","e");
     Stream.concat(list.stream(),list2.stream()).forEach(s->System.out.print(s+" "));
 
 
//结果:张ad 刘df 张ty 周kdh fjd a b c d e 
6.转换流中的数据类型

题:在字符串中只打印年龄

arr[1]指被截取的第二部分,及年龄。

3.Stream流的终结操作

Stream 流的终结操作是指在对流进行操作时,必须调用的最后一个操作。它们通常用于触发流的遍历、生成结果或执行副作用。终结操作是流操作中的最后一步,它们不会返回一个新的流,并且一旦被调用,流就不能再被操作或使用。

Consumer函数式接口(Lambda)

1.遍历
2.统计
//统计(个数)
        long count = list.stream().count();
        System.out.println(count);
3.收集流中的数据,放到数组中

方法一:

用toArry()方法收集流中数据放入数组

Object[] arr1 = list.stream().toArray();
        System.out.println(Arrays.toString(arr1));

方法二:

IntFunction的泛型:具体类型的数组

apply的形参:流中数据的个数,要跟数组的长度保持一致

apply的返回值:具体类型的数组//方法体:就是创建数组
toArray方法的参数的作用:负责创建一个指定类型的数组

toArray方法的底层,会依次得到流里面的每一个数据,并把数据放到数组当中

toArray方法的返回值:是一个装着流里面所有数据的数组

String[] arr=list.stream().toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];//数组的长度是value
            }
        });
        System.out.println(Arrays.toString(arr));
 
        //改成lambda表达式
        String[] arr2 = list.stream().toArray(value -> new String[value]);
        System.out.println(Arrays.toString(arr2));

4.收集方法collect超详解

1.收集到List集合中

例:把所有的男性收集List集合当中(这里的[1]是指截取的第二部分,也就是性别,[2]则是年龄)

 //收集方法collect(Collector collector)
        ArrayList<String> list4=new ArrayList<>();
        Collections.addAll(list4,"张ad-男-23","刘df-女-19","张ty-男-33","周kdh-女-17","fjd-男-34");
 
        List<String> newList = list4.stream().filter(s -> "男"
                        .equals(s.split("-")[1]))
                .collect(Collectors.toList());
 
        System.out.println(newList);
2.收集到Set集合中

把所有的男性收集Set集合当中

​
 Set<String> newList2 = list4.stream().filter(s -> "男"
                        .equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(newList2);

​
3.收集到Mapt集合中

注意:如果我们要把键收集到Map中,键不能重复,否则会报错

 
        ArrayList<String> list4=new ArrayList<>();
                Collections.addAll(list4,"张ad-男-23","刘df-女-19","张ty-男-33","周kdh-女-17","fjd-男-34");
 
        Map<String, Integer> newmap1 = list4.stream().filter(s -> "男"
                        .equals(s.split("-")[1]))
                .collect(Collectors.toMap(new Function<String, String>() {
                    @Override
                    public String apply(String s) {
                        return s.split("-")[0];
                    }
                }, new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.parseInt(s.split("-")[2]);
                    }
                }));
        System.out.println(newmap1);
 
        //写成lambda
        Map<String, Integer> newmap2 = list4.stream().filter(s -> "男"
                        .equals(s.split("-")[1]))
                .collect(Collectors.toMap(s -> s.split("-")[0],
                        s -> Integer.parseInt(s.split("-")[2])));
        System.out.println(newmap2);

模板:

上面的参数一(键)指第五行代码的第二个String,参数二(值)指底底十行中的Integer。

更改返回值后如下:([0]不是截取后面的数组,代表的是名字,[2]代表的是年龄)

最终形式之Lambda:

小结:

5.实战演练

1.数字过滤

2.字符串过滤并收集

3.自定义对象过滤并收集

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值