Stream流创建_操作_收集_案例

本文展示了如何使用Java Stream API进行数据处理,包括从集合、Map和数组中筛选数据,使用中间操作如filter、limit、skip、distinct等,并进行聚合操作。示例还涉及了对数字列表的平均值计算以及将结果转换为List。
摘要由CSDN通过智能技术生成
package com.Cx_330.run;

import org.junit.Test;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CCC {
    public static double allNums;
    public static void main(String[] args) {
        //Collection
        List<String> list=new ArrayList<>();
        Collections.addAll(list,"张三","李四","张思","阿信","张小三","张思","张思","张三");
        list.stream();
        //Map
        Map<Integer,String> map=new HashMap<>();
        Stream<Integer> keystream = map.keySet().stream();
        Stream<String> valuestream = map.values().stream();
        Stream<Map.Entry<Integer, String>> entrystream = map.entrySet().stream();
        //Arrays
        String[] str= {"张小三","李四","张哈","张三丰"};
        Stream<String> strstream = Arrays.stream(str);
        Stream<String> str1 = Stream.of(str);

        //中间件
        System.out.println("\n---------姓张的--------------------");
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");
            }
        }).forEach((s)-> System.out.print(s+" "));
        System.out.println("\n---------姓张的两个字--------------------");
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");
            }
        }).filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length()==2;
            }
        }).forEach((s)-> System.out.print(s+" "));
        System.out.println("\n--------姓张的并且两个字且只要第一个---------------");
        list.stream()
                .filter((s)->s.startsWith("张"))
                .filter((s)->s.length()==2)
                .limit(1L)
                .forEach((s)-> System.out.print(s+" "));
        System.out.println("\n--------姓张的并且两个字跳过第一个---------------");
        list.stream()
                .filter((s)->s.startsWith("张"))
                .filter((s)->s.length()==2)
                .skip(1L)
                .forEach((s)-> System.out.print(s+" "));
        System.out.println("\n--------姓张的并且两个字并去除重复---------------");
        list.stream()
                .filter((s)->s.startsWith("张"))
                .filter((s)->s.length()==2)
                .distinct()
                .forEach((s)-> System.out.print(s+" "));
        System.out.println("\n--------合并两个字姓张的以及姓李的并去除重复---------------");
        Stream<String> s1 = list.stream()
                .filter((s) -> s.startsWith("张"))
                .filter((s) -> s.length() == 2)
                .distinct();
        Stream<String> s2 = list.stream().filter(s -> s.startsWith("李"));
        Stream<String> sss = Stream.concat(s1, s2);
        sss.forEach(s-> System.out.print(s+" "));


        System.out.println("\n--------求姓李的个数---------------");
        long len = list.stream().filter(s -> s.startsWith("李")).count();
        System.out.println(len);


        System.out.println("***********************************");
        ArrayList<Double> doubles = new ArrayList<>();
        Collections.addAll(doubles,1.0,2.0,3.0,4.0,5.0,6.0,7.0);
        //去掉最大值 最小值 求平均数
        //上面定义一个allNums当作共享变量 接收总和
        //求平均值 先  排升序  在去除  在遍历求和
        doubles.stream()
                .sorted((d1,d2)->Double.compare(d1,d2))
                .skip(1)
                .limit(doubles.size()-2)
                .forEach(d->allNums+=d);
        System.out.println("平均值为: "+allNums/(doubles.size()-2));


        System.out.println("\n--------合并两个字姓张的并去除重复并返回到一个List集合---------------");
          List<String>stringList=list.stream()
                .filter((s) -> s.startsWith("张"))
                .filter((s) -> s.length() == 2)
                .distinct()
                .collect(Collectors.toList());
        System.out.println(stringList);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C_x_330

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

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

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

打赏作者

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

抵扣说明:

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

余额充值