java-stream流案例

需求

在这里插入图片描述

代码

Vote类

// 1. 定义一个投票类
public class Vote {
    private String name;
    private ArrayList<String> voteList;

    public Vote(String name, ArrayList<String> voteList) {
        this.name = name;
        this.voteList = voteList;
    }

    public String getName() {
        return name;
    }

    public ArrayList<String> getVoteList() {
        return voteList;
    }

    @Override
    public String toString() {
        return "Vote{" +
                "name='" + name + '\'' +
                ", voteList=" + voteList +
                '}';
    }
}

创建一个集合

ArrayList<Vote> votes = new ArrayList<>();

ArrayList<String> list = new ArrayList<>();
list.add("农家乐");
list.add("野外拓展");
Vote vote = new Vote("张全蛋儿",list);
votes.add(vote);

ArrayList<String> list2 = new ArrayList<>();
list2.add("轰趴");
list2.add("野外拓展");
list2.add("健身房");
Vote vote2 = new Vote("李二狗子",list2);
votes.add(vote2);

ArrayList<String> list3 = new ArrayList<>();
list3.add("野外拓展");
Vote vote3 = new Vote("翠花",list3);
votes.add(vote3);

ArrayList<String> list4 = new ArrayList<>();
list4.add("轰趴");
list4.add("健身房");
Vote vote4 = new Vote("小帅",list4);
votes.add(vote4);

ArrayList<String> list5 = new ArrayList<>();
list5.add("农家乐");
Vote vote5 = new Vote("有容",list5);
votes.add(vote5);

stream遍历


// 创建一个Map统计对象
Map<String,Integer> map = new HashMap<>();
// 将votes转换为stream流 获取每个vote的voteList对象
votes.stream().map(Vote::getVoteList).forEach(voteList ->{
    voteList.stream().forEach( voteItem ->{
        if (map.containsKey(voteItem)){
            map.put(voteItem,map.get(voteItem)+1);
        }else {
            map.put(voteItem,1);
        }
    });
});
map.forEach((k,v) ->{
    System.out.println(k + " : " + v);
});


// 获取map集合汇总得票数最多的活动
String maxKey = null;
Map.Entry<String,Integer> maxEntry = null;
ArrayList<Map.Entry<String, Integer>> collect = map.entrySet().stream().sorted(
        (e1, e2) -> e2.getValue().compareTo(e1.getValue())
).collect(Collectors.toCollection(ArrayList::new));

maxEntry = collect.get(0);
maxKey = maxEntry.getKey();
System.out.println("得票数最多的活动是:" + maxEntry.getKey() + " : " + maxEntry.getValue());

// 获取没有投最多票的人
String finalMaxKey = maxKey;
List<Vote> noVoteMax = votes.stream().filter(voteItem -> !voteItem.getVoteList().contains(finalMaxKey)).collect(Collectors.toList());
noVoteMax.forEach(System.out::println);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/582170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

比较LLM和RAG技术:塑造AI的未来

在人工智能&#xff08;AI&#xff09;的动态领域中&#xff0c;两项突破性技术——大型语言模型&#xff08;LLM&#xff09;和检索增强生成&#xff08;RAG&#xff09;因其在理解和生成类人文本方面的变革潜力而脱颖而出。本文开始了LLM和RAG之间的比较之旅&#xff0c;阐明…

ROS2专栏(三) | 理解ROS2的动作

​ 1. 创建一个动作 目标&#xff1a; 在ROS 2软件包中定义一个动作。 1.1 新建包 设置一个 workspace 并创建一个名为 action_tutorials_interfaces 的包&#xff1a; mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention cd ros2_ws/s…

C++:拷贝构造函数与赋值的区别

目录 拷贝构造函数 拷贝构造函数的使用方法 拷贝构造函数与赋值运算符的区别 谈深拷贝和浅拷贝 浅拷贝 注意: 深拷贝 拷贝构造函数 拷贝构造函数的也是一种构造函数,它的作用是将一个类的成员拷贝到另一个类中,类似于赋值。拷贝构造函数分为深拷贝和浅拷贝。 先来定义一…

【MySQL 5.7安装时候 出现2503报错,解决方案】

MySQL5.7 安装遇 2503问题如何解决 1.能正常安装就点这里2.出现2503问题就看这2.1先看问题2.1.1在官网下载好安装包后&#xff0c;首先先确认安装包是否完整&#xff0c;排除安装包损坏的问题2.1.2 安装时候出现这个2503问题 2.2上解决方案2.2.1 打开任务管理器2.2.2 解决 1.能…

网盘—上传文件

本文主要讲解网盘里面关于文件操作部分的上传文件&#xff0c;具体步骤如下 目录 1、实施步骤&#xff1a; 2、代码实现 2.1、添加上传文件协议 2.2、添加上传文件槽函数 2.3、添加槽函数定义 2.4、关联上传槽函数 2.5、服务器端 2.6、在服务器端添加上传文件请求的ca…

4G远程温湿度传感器在农业中的应用—福建蜂窝物联网科技有限公司

解决方案 农业四情监测预警解决方案 农业四情指的是田间的虫情、作物的苗情、气候的灾情和土壤墒情。“四情”监测预警系统的组成包括管式土壤墒情监测站、虫情测报灯、气象站、农情监测摄像机&#xff0c;可实时监测基地状况,可以提高监测的效率和准确性&#xff0c;为农业生…

分布式系统事务一致性解决方案(基于事务消息)

参考&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/ 文章目录 概要错误的方案方案一&#xff1a;业务方自己实现方案二&#xff1a;RocketMQ 事务消息什么是事务消息事务消息处理流程事务消息生命周期使用限制使用示例使用建议 概要 …

进迭时空宣布开源RISC-V芯片的AI核心技术

仟江水商业电讯&#xff08;4月29日 北京 委托发布&#xff09;4月29日&#xff0c;在“创芯生生不息——进迭时空2024年度产品发布会”上&#xff0c;进迭时空CEO、创始人&#xff0c;陈志坚博士宣布将开源进迭时空在自研RISC-V AI CPU上的核心技术&#xff0c;包括AI扩展指令…

数据科学导论续

一、大数据采集的流程和方法 大数据采集的流程和方法 系统日志采集方法 很多互联网企业都有自己的海量数据采集工具&#xff0c;多用于系统日志采集&#xff0c;例如&#xff1a; Flume&#xff1a;分布式日志收集系统&#xff0c;最初由Cloudera开发&#xff0c;现是Apache的…

SPSS之判别分析

SPSS的判别分析过程中默认使用的是Fisher判别法和Bayes判别法&#xff0c;并以前者为主&#xff0c;在指定选项后也可以给出Bayes判别法的结果。 SPSS中判别分析在【分析】—【分类】—【判别】中完成。选定类别变量放入【分组变量】框中&#xff0c;单击定义范围(D)按钮给出类…

《Fundamentals of Power Electronics》——Buck、Boost、Buck-Boost三个电路的CCM-DCM工作特性总结

Buck、Boost、Buck-Boost这三个电路的CCM-DCM工作特性总结如下表所示&#xff1a; Buck、Boost、Buck-Boost这三个电路工作在DCM模式下电压传输比的对比图如下所示&#xff1a; 由上图可知&#xff0c;Buck-Boost电路的工作特性是一条斜率为的直线&#xff0c;Buck电路和Boost电…

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

Qt窗口

QMainWindow Qt 窗⼝ 是通过 QMainWindow类 来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃ QWidget 类&#xff0c;并且提供了⼀个预定义的 布局。QMainWindow 包含 ⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动…

Python并发编程:揭开多线程与异步编程的神秘面纱

第一章&#xff1a;并发编程导论 1.1 并发与并行概念解析 1.1.1 并发性与并行性的区别 想象一下繁忙的厨房中多位厨师同时准备不同的菜肴——即使他们共享有限的空间和资源&#xff0c;也能协同工作&#xff0c;这就是并发性的一个生动比喻。并发性意味着多个任务在同一时间…

getchar和putchar的用法

getchar() 和 putchar() 是一对字符输入/输出函数.他们通常比scanf() 和printf() 函数更快更便捷。 getchar()不带任何参数&#xff0c;其实getchar() 和putchar()与scanf() 和printf()功能相似。 接下来博主简单的跟大家解释一下。 1.getchar 通常把输入的字符赋予一个字符变…

uReport2 报表设计

最近刚好用到这个报表工具&#xff0c;刚开始接触都还不会用&#xff0c;学习了一下&#xff0c;在这边做个记录。 数据源 目前报表框架支持和使用的数据源连接有两种方式&#xff1a;添加数据库连接 和添加内置数据源连接。 进入报表设计 http://IP:端口/context-path/urepor…

计算机网络之传输层TCP\UDP协议

UDP协议 用户数据报协议UDP概述 UDP只在IP数据报服务之上增加了很少功能&#xff0c;即复用分用和差错检测功能 UDP的主要特点&#xff1a; UDP是无连接的&#xff0c;减少开销和发送数据之前的时延 UDP使用最大努力交付&#xff0c;即不保证可靠交付&#xff0c;可靠性由U…

一款神奇的地理数据可视化python库

在地理信息系统&#xff08;GIS&#xff09;和地理数据可视化领域&#xff0c;Python的易用性和强大的库支持使其成为处理地理数据的理想选择之一。今天我们介绍Cartopy库&#xff0c;它为地理数据可视化提供了强大的支持。无论是对于GIS专业人士还是对地理数据可视化感兴趣的初…

网络编程——TCP

socket socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务&#xff0c;数据无差错、无重复、无丢失、无失序的发送且按发送顺序接收。内设置流量控制&#xff0c;避免数据流淹没慢的接收方。数据被看作是字节流&#xff0c;无长度限制。 数据报…

异常处理方式

在定义方法时&#xff0c;首先需要先对参数数据进行合法判断 数据若不合法&#xff0c;使用抛出异常的方式来告诉调用者&#xff0c;传递合法的数据进来 在方法内使用 throw 抛出指定异常对象&#xff0c;throw new XxxException(“异常产生原因”) 创建的是运行时异常&…