java8-stream 常用操作

简介: java 8 stream 流的操作总是记不住,每次都忘,需要每次百度,这次索性都记录下来,并将常用的网站也放在这里,已供以后学习工作使用

java8-stream操作


java 8 stream 流的操作总是记不住,每次都忘,需要每次百度,这次索性都记录下来,并将常用的网站也放在这里,已供以后学习工作使用


stream 简单介绍

Stream是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)

Stream流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算,能让代码更加简洁,极大地简化了集合的处理操作,提高了开发的效率和生产力

Stream API 借助于同样新出现的 Lambda 表达式,而且使用并发模式,极大的提高编程效率和程序可读性。


Stream流其实就相当于是工厂上的流水线,后面会对数据更好的进行操作,如打印,过滤等等。说到底把它比作是工厂上的流水线还是很形象的。


常用的stream流实操网站


www.yuque.com/liyufei/ia5…

blog.csdn.net/qq_42003527…


具体实践


创建手机类



@Data
@AllArgsConstructor
public class Phone {
    private String name;
    private String brand;
    private Integer price;
}

开始常用stream操作:


public class StreamService {
    static List<Phone> list = new ArrayList<>();
    static {
        list.add(new Phone("小米 13", "xiaomi", 4599));
        list.add(new Phone("小米 12", "xiaomi", 2099));
        list.add(new Phone("苹果 14", "apple", 5399));
        list.add(new Phone("苹果 13", "apple", 2399));
        list.add(new Phone("华为 P60", "huawei", 4488));
        list.add(new Phone("华为 P40", "huawei", 2088));
        list.add(new Phone("vivo X90", "vivo", 2699));
    }
    public static void main(String[] args) {
        // 找出价格大于3000的手机,有三个
        List<Phone> collectFilter = list.stream().filter(phone -> phone.getPrice() > 3000).collect(Collectors.toList());
        collectFilter.stream().forEach(System.out::print);
        // 取所有的手机名称
        List<String> collect = list.stream().map(Phone::getName).collect(Collectors.toList());
        // 判断是否有手机的价格超过8000
        boolean b = list.stream().allMatch(phone -> phone.getPrice() > 8000);
        // 取最贵的一台手机
        Phone phone = list.stream().max(Comparator.comparing(Phone::getPrice)).get();
        Phone phone1 = list.stream().collect(maxBy(Comparator.comparingInt(Phone::getPrice))).get();
        // 取每种品牌中最贵的一台手机
        ArrayList<Phone> arrayList = list.stream().sorted(Comparator.comparing(Phone::getPrice).reversed())
                .collect(collectingAndThen(toCollection(() -> new TreeSet<>(Comparator.comparing(Phone::getBrand))), ArrayList::new));
        // 取所有手机的价格总和
        Integer sum1 = list.stream().map(Phone::getPrice).reduce(Integer::sum).get();
        Integer sum2 = list.stream().collect(summingInt(Phone::getPrice));
        // 取最贵的手机价格
        Integer max = list.stream().map(Phone::getPrice).reduce(Integer::max).get();
        // 取所有手机价格平均值
        Double collect1 = list.stream().collect(averagingInt(Phone::getPrice));
        // 取所有手机价格的最大值,最小值,总和等信息
        IntSummaryStatistics collect2 = list.stream().collect(summarizingInt(Phone::getPrice));
        // 将所有手机名称已逗号分割成字符串
        String collect3 = list.stream().map(Phone::getName).collect(joining(","));
        // 根据品牌分组
        Map<String, List<Phone>> collect4 = list.stream().collect(groupingBy(Phone::getBrand));
        // 分组求和,求每种手机的价格总和
        Map<String, Integer> collect5 = list.stream().collect(groupingBy(Phone::getBrand, summingInt(Phone::getPrice)));
    }
}
目录
相关文章
|
缓存 监控 Linux
|
4天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1106 0
|
3天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
532 10
|
13天前
|
人工智能 运维 安全
|
12天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
4天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
301 0
|
11天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
807 23