Java基础-Stream流

复制代码
package Day03;

import com.sun.jdi.Value;

import java.util.ArrayList;

public class StreamTest01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");
        //要求:所有以张开头的存到一个新集合中
        //要求:遍历打印结果
        ArrayList<String> list1 = new ArrayList<>();
        for (String s : list) {
            if(s.charAt(0)=='张'){
                list1.add(s);
            }
        }
        for (String s : list1) {
            System.out.println(s);
        }
        System.out.println("=======================");
        //要求:把张开头,长度为3的元素存到一个新集合
        //要求:遍历打印结果
        ArrayList<String> list2 = new ArrayList<>();
        for (String s : list) {
            if(s.charAt(0)=='张'&&s.length()==3){
                list2.add(s);
            }
        }
        for (String s : list2) {
            System.out.println(s);
        }
        System.out.println("=======================");
        //Stream流
        list.stream().filter(a->a.charAt(0)=='张').filter(b->b.length()==3).forEach(c-> System.out.println(c));
    }
}

单列集合:

复制代码
package Day03;

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

public class StreamTest02 {
    public static void main(String[] args) {
        //创建单列集合
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "a", "b", "c", "d", "e", "f", "g", "h");
        //获取stream流
        //获取到一条流水线,并把集合上的数据放到流水线上
        Stream<String> stream1 = list.stream();
        //使用终结方法,打印流水线上所有的数据
        stream1.forEach(s-> System.out.print(s+","));
        //stream流编程中,一般会使用链式编程
        list.stream().forEach(s-> System.out.println(s));
    }
}

双列集合:

复制代码
package Day03;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class StreamTest03 {
    public static void main(String[] args) {
        //创建一个双列集合
        HashMap<Integer, String> hash = new HashMap<>();
        //
        hash.put(1,"a");
        hash.put(2,"b");
        hash.put(3,"c");
        hash.put(4,"d");
        hash.put(5,"e");
        //双列集合如果要使用stream流,先要变成单列集合
        Set<Map.Entry<Integer, String>> entries = hash.entrySet();
        entries.stream().forEach(s->{if(s.getKey()==1){
            System.out.println(s.getKey()+","+s.getValue());
        }});
        //
    }
}

数组:

复制代码
package Day03;

import java.util.Arrays;

public class StreamTest04 {
    public static void main(String[] args) {
        String[] arr=new String[3];
        arr[0]="a";
        arr[1]="b";
        arr[2]="c";
        //stream流
        Arrays.stream(arr).forEach(s-> System.out.println(s));
    }
}

Stream流中的中间方法

Stream流中的终结方法

复制代码
package Day03;

import java.util.*;
import java.util.stream.Collectors;

public class StreamTest06 {
    public static void main(String[] args) {
        /*
        * 集合中的终结方法
        * 1、遍历foreach
        * 2、统计
        * 3、收集(可以收集到集合中或者收集到数组中)*/
        //遍历:
        ArrayList<String> st = new ArrayList<>();
        Collections.addAll(st,"张三丰","张三丰","赵六","张无忌","张翠山","张大炮","张三","李四","王五");
        //foreach遍历后打印
        st.stream().forEach(s-> System.out.println(s));
        //count 计数
        long count = st.stream().count();
        System.out.println(count);
        //System.out.println(st.size());
        //收集
        //toArray():把流里面的数据收集到数组中
        String[] arr=new String[st.size()];
        //Object[] array = st.stream().toArray();
        //System.out.println(Arrays.toString(array));
        System.out.println("====================================");
        String[] array = st.stream().toArray(value -> new String[value]);
        System.out.println(Arrays.toString(array));
        //collect 收集流中的数据,放到集合中(List,Set,Map)
        ArrayList<String> st1 = new ArrayList<>();
        Collections.addAll(st1,"张三丰-男-16","张四丰-男-17","赵六-女-18","张无忌-男-17","张翠山-男-19","张大炮-女-20");
        //把st1中的全部男生都收集到List
        List<String> newlist = st1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(newlist);
        System.out.println("====================================");
        //收集到set集合(注意:如果收集到set集合,会去重)
        Set<String> newset = st1.stream().filter(s -> s.split("-")[1].equals("男"))
                .collect(Collectors.toSet());
        System.out.println(newset);
        //收集到Map集合
        //键:姓名,值:年龄
        Map<String, Integer> collect = st1.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(s -> s.split("-")[0], s -> Integer.parseInt(s.split("-")[2])));
        System.out.println(collect);
    }
}
相关推荐
华仔啊15 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing15 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程1 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
埃博拉酱2 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code