当前位置: 首页 > news >正文

Java集合工具:first和last

在平常开发过程中,我们经常会遇到截取列表片段的需求,比如取列表中前4个元素、取后四个元素。Java的List提供了subList方法,可以用来完成这些工作,但是使用起来并没有那么便利,比如取前四个元素:

list.subList(0, 4)

这里代码的本意是“取出列表中下标为0到4(不包括4)的元素”,结果恰好与需求相同,但是表达并非最直观。再来看取最后4个元素的版本:

int size = list.size();
list.subList(size - 4 ,size)

呃…更不直观了。我每次写这段程序都得小心翼翼检查index是否正确。

于是就有了本文要介绍的两个工具方法:firstlast

API介绍

  1. first
    方法签名:static <T> List<T> first(List<T> list, int n)
    功能:获取列表list中前n个元素,如果列表长度小于n,抛出异常。

  2. firstAtMost
    方法签名:static <T> List<T> firstAtMost(List<T> list, int n)
    功能:获取列表list中最多前n个元素,如果列表长度小于n,返回list的一个副本。

  3. last
    方法签名:static <T> List<T> last(List<T> list, int n)
    功能:获取列表list中最后n个元素,如果列表长度小于n,抛出异常。

  4. lastAtMost
    方法签名:static <T> List<T> lastAtMost(List<T> list, int n)
    功能:获取列表list中最多前n个元素,如果列表长度小于n,返回list的一个副本。

使用示例

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);List<Integer> first = first(list, 3);//{1, 2, 3}
List<Integer> atMostFirstList = firstAtMost(list, 3);//{1, 2, 3}
List<Integer> list1 = firstAtMost(list, 10);//{1, 2, 3, 4, 5, 6, 7}
List<Integer> last = last(list, 3);//{5, 6, 7}
List<Integer> lastAtMost = lastAtMost(list, 3);//{5, 6, 7}
List<Integer> last2 = lastAtMost(list, 30);//{1, 2, 3, 4, 5, 6, 7}

功能实现

    public static int size(@Nullable Collection<?> collection) {return collection == null ? 0 : collection.size();}public static <T> List<T> first(List<T> list, int n) {if (size(list) < n) {throw new IllegalArgumentException("list size less than " + n);} else {return new ArrayList<>(list.subList(0, n));}}public static <T> List<T> firstAtMost(List<T> list, int n) {int size = size(list);return size == 0? new ArrayList<>(): new ArrayList<>(size <= n ? list : list.subList(0, n));}public static <T> List<T> last(List<T> list, int n) {int size = size(list);if (size < n) {throw new IllegalArgumentException("list size less than " + n);} else {return new ArrayList<>(list.subList(size - n, size));}}public static <T> List<T> lastAtMost(List<T> list, int n) {int size = size(list);return size == 0? new ArrayList<>(): new ArrayList<>(size <= n ? list : list.subList(size - n, size));}

相关文章:

Java集合工具:first和last

在平常开发过程中&#xff0c;我们经常会遇到截取列表片段的需求&#xff0c;比如取列表中前4个元素、取后四个元素。Java的List提供了subList方法&#xff0c;可以用来完成这些工作&#xff0c;但是使用起来并没有那么便利&#xff0c;比如取前四个元素&#xff1a; list.sub…...

leetcode 905. 按奇偶排序数组

题目描述解题思路执行结果 leetcode 905. 按奇偶排序数组 题目描述 按奇偶排序数组 给你一个整数数组 nums&#xff0c;将 nums 中的的所有偶数元素移动到数组的前面&#xff0c;后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 示例 1&#xff1a; 输入&#xff1a;…...

密码学安全性证明(一)Cramer-Shoup密码系统

Cramer-Shoup密码系统来自于A Practical Public Key CryptosystemProvably Secure against Adaptive ChosenCiphertext Attack这篇论文 CDH问题回顾&#xff1a; 已知(g,g^x, gk)能否计算gxk DDH问题回顾&#xff1a; 已知(g,g^x, g^k &#xff0c;D)能否判断D是否等于g^xk 注意…...

Asp.net Core系列学习(1)

Asp.net Core 6系列学习 文章目录 Asp.net Core 6系列学习Asp.net Core 概述一、在 ASP.NET 4.x 和 ASP.NET Core 之间进行选择二、适用于服务器应用的 .NET 与 .NET Framework三、ASP.NET Core Web UI1.服务器和客户端呈现 UI 的优势和成本2.服务器呈现的 UI 四、可用的 ASP.N…...

IDEA 2022.2 安装以及自定义优化

IDEA2022.2 安装以及自定义优化 文章目录 IDEA2022.2 安装以及自定义优化安装图解获取激活码自定义优化文件编码设置设置类文档注释和方式注释模板方法分割线 常用插件离线安装 安装图解 静默卸载&#xff08;旧版本的设置和配置将不会被删除&#xff09; 获取激活码 略…...

【华为OD机试真题2023B卷 JAVA】阿里巴巴找黄金宝箱(II)

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 阿里巴巴找黄金宝箱(II) 知识点数组哈希表优先级队列 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上…...

Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版

首先Excel文件多表对多表之间的匹配(VLOOKUP),有多种办法&#xff0c; 1&#xff1a;将Excel文件导入Mysql或其他数据库,然后将两种表合并成一张表&#xff0c;接着用数据库匹配 2&#xff1a;将两种表内容&#xff0c;复制粘贴到一起&#xff0c;各自分别保存成一张表&#xf…...

shiro环境搭建

源码部署 这种方法相对复杂&#xff0c;如果不需要分析源码直接用docker就行 前置条件&#xff1a;Maven Ideal Tomcat 下载方式1&#xff1a;https://codeload.github.com/apache/shiro/zip/shiro-root-1.2.4&#xff0c;然后将文件夹导入ideal下载方式2&#xff1a;将shiro…...

一文读懂selenium自动化测试(基于Python)

前言 我们今天来聊聊selenium自动化测试&#xff0c;我们都知道selenium是一款web自动化测试的工具&#xff0c;它应该如何去运用呢?我们接着看下去。 ​1、Selenium简介&#xff1a; 1.1 Selenium&#xff1a; Selenium是一款主要用于Web应用程序自动化测试的工具集合。Sele…...

如何高效地在网上找开源项目

开源项目是发展技能、分享想法和成为开发社区一员的好方法。开源意味着软件功能背后的源代码与所有想要阅读它的人公开共享。这意味着你可以准确地看到一个系统是如何工作的——一旦你愿意冒险&#xff0c;就为它做出贡献。除了向所有人开放贡献外&#xff0c;这种开放代码库通…...

2023系统分析师---冲刺资料必备知识点三

视图的优点&#xff1a; 视图能简化用户的操作&#xff1b;视图机制可以使用户以不同的方式查询同一数据&#xff1b;视图对数据库重构提供了一定程度的逻辑独立性&#xff1b;视图可以对机密的数据提供安全保护&#xff1b; ER图、实体、联系、联系的类型&#xff1a; 分布…...

集成Bean Validation 1.1(JSR-349)到 SpringMVC

Spring4新特性——集成Bean Validation 1.1(JSR-349)到 SpringMVC Bean Validation 1.1当前实现是Hibernate validator 5&#xff0c;且spring4才支持。接下来我们从以下几个方法 讲解Bean Validation 1.1&#xff0c;当然不一定是新特性&#xff1a; 1. 集成Bean Valida…...

【软考中级】软件设计师选择题题集(一)

海明校验码是在n个数据位之外增设k个校验位,从而形成一个k+n位的新的码字, 使新的码字的码距比较均匀地拉大。n与k的关系是(1)。 (1)A.2k - 1≥n + k  B.2n - 1≤ n + k   C.n = k  D.n-1≤k 【答案】A 【解析】 【答案】B A 【解析】 在采用结构化方法进行系统分析时,…...

10个炫酷特效的网页写法(附源码),拿去就能用,奈斯奈斯

这是我借鉴其他博主的&#xff0c;给网页加个背景&#xff0c;给鼠标加个特效&#xff0c;“使用简单”&#xff0c;“效果爆炸”的页面&#xff0c;分享给大家&#xff0c;如果觉得有帮助可以点赞收藏支持一下&#xff0c;如果能关注一下就再好不过了。 内容转载于https://bl…...

vscode开发stm32的编译环境配置教程

文章目录 1. 背景2. 配置步骤2.1. vscode插件安装2.2. 新建工程2.3. 配置编译环境2.3.1. 芯片支持2.3.2. 编译器选择2.3.3. CPU类型2.3.4. 硬件浮点选项2.3.5. 使用自定义的链接脚本2.3.6. RAM/FLASH布局2.3.7. 构建器选项2.4. 编译3. 问题汇总3.1. 浮点编译开关3.2. MicroLIB编…...

Live800在线客服系统:客户体验即是业绩来源

“客户就是上帝”&#xff0c;这一论断在商业行为中早已成为不争的事实。 所有企业都知道&#xff0c;满足客户的需求才能让企业稳步发展。在产品同质化严重的今天&#xff0c;客户服务成为核心竞争力&#xff0c;试想一下&#xff0c;在产品、价格相差无几的两个企业中&#…...

SAP工具箱 MR22自定义BAPI

点击蓝字 关注我们 一 前言 标准事务代码MR22 通过调整金额影响物料的成本价,前台界面中单个凭证中允许输入多行物料, 但是对应的BAPI函数仅支持输入单行物料 BAPI_MATVAL_DEBIT_CREDIT 正常库存BAPI_SALESORDSTCK_DEBIT_CREDIT 销售订单库存 这种情况 婶可忍叔不可忍 (感谢用户…...

ASP.NET 网上选课系统的设计与实现(源代码+论文)

随着教育改革的不断深化,建立一套能够适应这些改变的行政管理方案也就显得尤为重要。在高等院校的日常工作中,每个学期都要面临学生的选课工作。以往在选课工作的各个阶段都是手工操作,不但效率低下、工作繁琐,而且容易出错,于是开发一套适合校情的网上选课系统便成为了教…...

SpringMVC学习总结(路由映射、参数传递、转发和重定向...)

目录 1. MVC简介 2. SpringMVC简介 3. 路由映射注解 3.1 RequestMapping 3.2 GetMapping与PostMapping 4. 接收前端传递参数 4.1 接收单/多个参数 4.2 接收对象 4.3 接收JSON对象 4.4 后端参数重命名/映射 4.5 设置参数必传/非必传 4.6 获取URL中的参数 4.7 获取文…...

基于MAC地址的ACL配置

基于MAC地址的ACL配置 【实验目的】 掌握基于MAC地址的标准ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 S1 e0/0 N/A N/A N/A e0/1 N/A N/A N/A PC1 N/…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...