JAVA---Stream流

使用步骤:①流水线放数据--->②中间方法--->③终结方法(最后一个方法)

①流水线放数据

单列集合:
//获取流水线并放数据可以简化代码为:
list.stream().forEach(s -> System.out.println(s));
双列集合:

两种办法:①:分别获取单列再获取stream流 ②:获取键值对

数组

零散数据:(但数据必须是相同类型)
也可以传递引用类型的数组,但不能传递基本数据类型的数组
Stream.of(1,2,3,4,5).forEach(s->System.out.println(s));

 


②中间方法

 

//过滤
 list.stream()
        .filter(s ->s.startsWith("张"))
        .forEach(s-> System.out.println(s));
//获取前几个
 list.stream()
        .limit(3)
        .forEach(s-> System.out.println(s));
//跳过前几个,输出后面的
 list.stream()
        .skip(3)
        .forEach(s-> System.out.println(s));

 跳过前两个,输出剩下中的前三个

 list.stream()
.skip(2)
.limit(2)
.forEach(s-> System.out.println(s));

 综合练习

package Nov1;

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

public class test1 {
    public static void main(String[] args) {
        //法一

        //创建一个集合,存储多个字符串元素
        ArrayList<String> list1 = new ArrayList<String>();
        Collections.addAll(list1,"A","B","C","D","E","F");

        //需求1:取前4个数据组成一个流
        Stream<String> s1 = list1.stream().limit(4);

        //需求2:跳过2个数据组成一个流
        Stream<String> s2 = list1.stream().skip(2);

        //需求3:合并需求1和需求2得到的流,并把结果在控制台输出(要求字符串元素不能重复)
        Stream.concat(s1,s2).distinct().forEach(s-> System.out.print(s));

        //法二
        System.out.println();
        System.out.println("==============================================");
        ArrayList<String> list3 = new ArrayList<String>();
        Collections.addAll(list3,"A","B","C","D","E","F");
        ArrayList<String> list4 = new ArrayList<String>();
        Collections.addAll(list4,"Q","B","W","D","T","F");
        Stream.concat(list3.stream(),list4.stream()).distinct().forEach(s-> System.out.print(s));

    }
}
类型转换

<String, Integer>分别代表原本数据类型和要转后的类型;

parseInt()为转换int的方法 ;

简写为λ后如下:


③终结方法

调用终结方法之后就不能调用其他的方法了

遍历与收集 

收集流中数据放入数组中

重写是为了放入指定类型的数组当中,而不是Object;

Arrays.toString() 是转为字符串输出;

[value]指定数组长度;

改为λ表达式

收集流中数据放入数组中
List不去重

s.split("-")[1] 从“-”处将字符串一分为二,[1]就是第二个字符,判断该字符是否为“男”;

Set去重

Map
package Nov1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class test2 {
    public static void main(String[] args) {
        //法一

        //创建一个集合,存储多个字符串元素
        ArrayList<String> list1 = new ArrayList<String>();
        Collections.addAll(list1,"A-y-1","B-n-2","C-y-3","D-y-4","E-n-5","F-y-6");

        Map<String, Integer> map = list1.stream()
                .filter(s -> "y".equals(s.split("-")[1]))
                .collect(Collectors.toMap(new Function<String, String>() {
                                              //toMap(a,b)中,a为键的生成规则;b为值的生成规则
                                              //a部分的<String,String>分别代表流中每个数据的数据类型 和 Map集合中键的数据类型
                                              //第一个String对应下面重写里(public String apply(String s))String s的String
                                              //第二个String对应下面重写里(public String apply(String s))String apply的String
                                              //后面第二个重写同理,只不过将键换成值
                                              @Override
                                              public String apply(String s) {
                                                  //apply的形参s代表流里面的每一个数据
                                                  //apply的方法体为:生成键;返回值为 已经生成的键
                                                  return s.split("-")[0];
                                              }
                                          },

                        new Function<String, Integer>() {
                            @Override
                            public Integer apply(String s) {

                                return Integer.parseInt(s.split("-")[2]); //注意把字符串转为整数
                            }
                        }));

        System.out.println(map);
    }
}

转为λ表达式:

 ArrayList<String> list1 = new ArrayList<String>();
        Collections.addAll(list1,"A-y-1","B-n-2","C-y-3","D-y-4","E-n-5","F-y-6");

        Map<String, Integer> map = list1.stream()
                .filter(s -> "y".equals(s.split("-")[1]))
                .collect(Collectors.toMap(
                        s->s.split("-")[0],
                        s->Integer.parseInt(s.split("-")[2])
                ));

        System.out.println(map);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

参宿七625

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

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

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

打赏作者

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

抵扣说明:

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

余额充值