java.lang.UnsupportedOperationException解决方法

问题描述

在实际开发中经常会有类似的这种代码,想要按类的某一个属性对列表中的元素分组。

例如:
有一些学生,然后根绝他们的年龄对他们进行分组。可以写出如下代码。

public class UnsupportedOperationExceptionDemo {@Data@NoArgsConstructor@AllArgsConstructorpublic static class Student {private String name;private Integer age;}public static void main(String[] args) {// 初始化几个学生List<Student> studentList = new ArrayList<>();studentList.add(new Student("张三", 18));studentList.add(new Student("李四", 19));studentList.add(new Student("王五", 18));studentList.add(new Student("赵六", 20));// 根据年龄对这个分组Map<Integer, List<Student>> map = new HashMap<>();for (Student student : studentList) {if (map.containsKey(student.getAge())) {List<Student> students = map.get(student.getAge());students.add(student);} else {map.put(student.getAge(), Arrays.asList(student));}}}
}

运行结果:
在这里插入图片描述
这是为什么呢?

原因分析

在for循环中如果集合中没有这个年龄的学生,则需要创建一个List然后将元素加入,所以偷了一下懒,直接使用了Arrays.asList(student)这样的代码。

问题就出在这一行代码!!!!

看一下asList的源码,发现也是new ArrayList(a)
在这里插入图片描述
不过仔细看一下这个ArrayList的全限定名是java.util.Arrays.ArrayList而不是我们平常使用的java.util.ArrayList

那这两个有何不同?为什么会报错?
因为上面的代码调用了java.util.Arrays.ArrayList对象的add方法,这个类并没有重写add方法,所以直接使用父类java.util.AbstractList中的方法,而父类的add方法就是会抛出UnsupportedOperationException异常
在这里插入图片描述

解决方案

方案一:创建java.util.ArrayList对象来存放元素
在这里插入图片描述

方案二:使用Java 8的Stream流来处理

Map<Integer, List<Student>> map = studentList.stream().collect(Collectors.groupingBy(Student::getAge));

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM Cortex-M安全之MPU介绍

ARM Cortex-M处理器系列中的存储保护单元&#xff08;Memory Protection Unit&#xff0c;简称MPU&#xff09;是一种硬件机制&#xff0c;可用于在嵌入式系统中实现存储保护和访问权限控制。MPU允许开发人员对不同的内存区域分配不同的权限&#xff0c;从而提供对系统代码和数…

关键字volatile作用和用法

目录 一、多线程编程中的volatile关键字 二、嵌入式编程中的volatile关键字 三、 优化编译器优化 四、 指针类型转换 一个定义为volatile的变量是说这变量可能会被意想不到地改变&#xff0c;这样&#xff0c;编译器就不会去假设这个变量的值了。 精确地说就是&#xff0c;…

动态规划求解完全背包问题(c++实现)

首先是朴素版代码&#xff0c;三层for循环第一层是第几个物品&#xff0c;第二层是体积&#xff0c;第三层是第几个物品的个数&#xff1b;朴素版代码时间复杂度较高&#xff0c;效率低&#xff0c;容易超时。 #include<iostream> using namespace std; const int N1010…

【Docker】Swarm的ingress网络

Docker Swarm Ingress网络是Docker集群中的一种网络模式&#xff0c;它允许在Swarm集群中运行的服务通过一个公共的入口点进行访问。Ingress网络将外部流量路由到Swarm集群中的适当服务&#xff0c;并提供负载均衡和服务发现功能。 在Docker Swarm中&#xff0c;Ingress网络使…

RTL编码(2)——模块优化

一、顶层模块的划分 在RTL编码中&#xff0c;我们是以模块为单位进行设计的&#xff0c;模块之间的连接和嵌套关系对于电路结构有着很大的影响。一个好的系统设计中&#xff0c;我们应该使得模块尽量满足以下两个标准&#xff1a; 顶层模块扁平化内部模块层次化 1.1 顶层模块扁…

系列学习前端之第 3 章:一文精通 css

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 一、CSS基础 1. CSS简介 CSS 的全称为&#xff1a;层叠样式表 ( Cascading Style Sheets ) 。 CSS 也是一种标记语言&#xff0c;用于给 HTML 结构设…

使用arcpy移除遥感影像云层

先讲思路&#xff0c;然后上代码&#xff1a; 去除云层 思路1&#xff1a; 如果同一地理区域的多个图像&#xff0c;其中一些部分有丰富的云&#xff0c;而另一些部分没有云&#xff0c;则可以将它们组合起来&#xff0c;以便无云的部分替代多云的部分。这种方法很简单&…

编写高质量Python (第29条) 用赋值表达式消除推导中的重复代码

第 29 条 用赋值表达式消除推导中的重复代码 ​ 推导 list、dict 与 set 等变体结构时&#xff0c;经常要在多个地方用到同一个计算结果。例如&#xff0c;我们要给制作紧固件等公司编写程序来管理订单。顾客下单后&#xff0c;我们要判断当前的库存能否满足这份订单&#xff…

C++ vector基本操作

目录 一、介绍 二、定义 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 总结&#xff08;扩容机制&#xff09; 五、增删查改 1、push_back & pop_back 2、find 3、insert 4、erase 5、swap 6、operator[] 一、介绍 vector…

前端CSS(层叠样式表)总结

CSS2总结 一、CSS基础 1. CSS简介 CSS 的全称为&#xff1a;层叠样式表 ( Cascading Style Sheets ) 。CSS 也是一种标记语言&#xff0c;用于给 HTML 结构设置样式&#xff0c;例如&#xff1a;文字大小、颜色、元素宽高等等。 简单理解&#xff1a; CSS 可以美化…

使用python脚本轻松实现ssh免密登陆配置

1.安装python和pip包 yum install -y python python-pip 2.pip安装依赖库 pip install pexpect # 此库用相当于linux中的expect命令 3.完整脚本 # codingUTF-8 import sys,os,pexpect,subprocesshost_controller"192.168.174.150" …

<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述 1 程序设计语言的基本概念 1-1 程序设计语言的目的 程序设计语言是为了书写计算机程序而人为设计的符号语言&#xff0c;用于对计算过程进行描述、组织和推导。 1-2 程序语言分类 低级语言 : 机器语言&#xff08;计算机硬件只能识别0和1的指令序列)&…

cmd 或者bat 创建快捷方式,并配置开机自动启动

echo off echo Set oWS WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs echo sLinkFile "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\你的程序名称.lnk" >> CreateShortcut.vbs echo Set oLink oWS.CreateShortc…

【开放集检测OSR】RPL(Reciprocal Point Learning)、ARPL和ARPL+CS 概念辨析

一、RPL&#xff08;Reciprocal Point Learning&#xff09; 在开放集检测中&#xff0c;RPL&#xff08;Reciprocal Point Learning&#xff09;方法旨在识别出不属于任何已知类别的开放集样本。 RPL方法基于以下原则&#xff1a;开放集样本与已知类别之间的差异性较大&…

java设计模式学习之【装饰器模式】

文章目录 引言装饰器模式简介定义与用途实现方式 使用场景优势与劣势装饰器模式在Spring中的应用画图示例代码地址 引言 在日常生活中&#xff0c;我们常常对基本事物添加额外的装饰以增强其功能或美观。例如&#xff0c;给手机加一个保护壳来提升其防护能力&#xff0c;或者在…

SwiftUI 中创建一个自定义文件管理器只需4步!你敢信!?

概览 在 SwiftUI 中写一个自定义文件内容的管理器有多难呢&#xff1f; 答案可能超乎小伙伴们的想象&#xff1a;仅需4步&#xff01;可谓是超级简单&#xff01; 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 概览1. 第一步&#xff1a;定义文件类型2. 第二步&…

Dockerfile 指令的最佳实践

这些建议旨在帮助您创建一个高效且可维护的Dockerfile。 一、FROM 尽可能使用当前的官方镜像作为镜像的基础。Docker推荐Alpine镜像&#xff0c;因为它受到严格控制&#xff0c;体积小&#xff08;目前不到6 MB&#xff09;&#xff0c;同时仍然是一个完整的Linux发行版。 FR…

从主从复制到哨兵模式(含Redis.config配置模板)

文章目录 前言一、主从复制1.概述2.作用3.模拟实践搭建场景模拟实践 二、哨兵模式1.概述2.配置使用3.优缺点4.sentinel.conf完整配置 总结 前言 从主从复制到哨兵模式。 一、主从复制 1.概述 主从复制&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Red…

0010Java安卓程序设计-ssm基于安卓的掌上校园系统

文章目录 **摘要**目录系统实现5.2管理员功能模块开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;…

【Wrapper上下文包装器模式】

1.不管是什么类型的Redis&#xff0c;我们都可以包装为&#xff1a;GameRedis 2.对属性计算的需求&#xff0c;我们可以包装处MTHero, 然后整理出所有的属性&#xff0c;从而计算出升级战力变化等。