kotlin distinctBy 使用

distinctBy 是 Kotlin 中的一个函数,它允许你根据特定的键或属性对列表进行去重。它会保留第一次出现的元素,后续重复的元素将被过滤掉。

以下是使用 distinctBy 的一些例子:

示例 1: 根据对象的属性去重

假设你有一个包含对象的列表,你希望根据对象的某个属性进行去重:

data class Person(val name: String, val age: Int)val people = listOf(Person("Alice", 30),Person("Bob", 25),Person("Alice", 35),Person("Charlie", 30)
)val distinctPeopleByName = people.distinctBy { it.name }println(distinctPeopleByName)  
// 输出: [Person(name=Alice, age=30), Person(name=Bob, age=25), Person(name=Charlie, age=30)]

在这个例子中,distinctBy 根据 name 属性对列表进行去重。

示例 2: 根据计算出的键去重

你也可以根据一个计算出的键来去重:

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)val distinctByEvenOdd = numbers.distinctBy { it % 2 }println(distinctByEvenOdd)  
// 输出: [1, 2]

在这个例子中,distinctBy 根据数字是奇数还是偶数进行去重。

示例 3: 根据多个属性去重

如果你需要根据多个属性来去重,可以创建一个组合键:

data class Person(val name: String, val age: Int)val people = listOf(Person("Alice", 30),Person("Alice", 30),Person("Bob", 25),Person("Alice", 35),Person("Charlie", 30)
)val distinctPeopleByNameAndAge = people.distinctBy { Pair(it.name, it.age) }println(distinctPeopleByNameAndAge)  
// 输出: [Person(name=Alice, age=30), Person(name=Bob, age=25), Person(name=Alice, age=35), Person(name=Charlie, age=30)]

在这个例子中,distinctBy 根据 nameage 的组合键进行去重。

通过使用 distinctBy,你可以方便地根据任意属性或计算出的键来对列表进行去重操作。

---- 文章由 ChatGPT 生成

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

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

相关文章

【2024——CUMCM】Matlab快速入门

目录 常识 disp and input 字符串合并 sum 提取矩阵指定位置的元素 指定行列 指定行or指定列(返回行/列向量) 指定某些行 指定全部元素,按列拼接 size repmat 矩阵的运算 基本运算 形状相同的矩阵运算 每个元素同时和常数相乘或相…

异步主从复制

主从复制的概念 主从复制是一种在数据库系统中常用的数据备份和读取扩展技术,通过将一个数据库服务器(主服务器)上的数据变更自动同步到一个或多个数据库服务器(从服务器)上,以此来实现数据的冗余备份、读…

【2】A-Frame核心设计

一、基于HTML和Primitives的表达 1.HTML - 超文本标记语言 A-Frame 基于 HTML 和 DOM 之上,使用自定义元素的 polyfill。 HTML 是 Web 的构建块,提供了最易于访问的计算语言之一。无需安装或构建步骤,使用 HTML 创建仅涉及 HTML 文件中的文…

【STM32/HAL】嵌入式课程设计:简单的温室环境监测系统|DS18B20 、DHT11

前言 板子上的外设有限,加上想法也很局限,就用几个传感器实现了非常简单的监测,显示和效应也没用太复杂的效果。虽说很简单,但传感器驱动还是琢磨了不久,加上串口线坏了,调试了半天才发现不是代码错了而是…

ORA-12537: TNS:连接关闭/Io 异常: Got minus one from a read call

在另外一个数据库建立dblink的时候,发现执行命令报错: 被连接的数据库我也上去过,用工具尝试登陆也报错: IO Error: Got minus one from a read call, connect lapse 1 ms., Authentication lapse 0 ms. Got minus one from a …

设计模式探索:装饰器模式

1. 装饰器模式定义 装饰器模式(Decorator Pattern) 装饰器模式是一种结构型设计模式,允许向一个对象动态添加行为。在不改变类的接口的情况下,装饰器模式在原始类上增加额外的职责,并且支持多个装饰器嵌套使用。 装…

一个php文件怎么实现联系表单自动发送邮件

学习PHP:如何编写一个自动发送邮件的联系表单处理器? 无论是反馈意见、业务咨询,还是技术支持,联系表单都能为用户提供便捷的交流途径。AokSend将探讨如何通过一个PHP文件实现联系表单的自动发送邮件功能。 php文件:…

运用F5构建机器人防御,轻松应对恶意Bot威胁

数字化加快了信息的传播与交流,网络罪犯也借机纷纷涌向线上业务。攻击者通过暴力破解、字典攻击和撞库攻击破坏身份验证,导致账户被接管、欺诈、经济损失和客户不满,对应用的影响可能是灾难性的。面对日新月异的攻击,F5分布式云机…

作业/数据结构/2024/7/8

链表的相关操作作业: 1】 按值修改 2】按值查找,返回当前节点的地址 (先不考虑重复,如果有重复,返回第一个) 3】 逆置(反转) 4】释放链表 main.c #include "head.h"int main(int argc, con…

Python程序打包成exe文件的终极指南

Python程序打包成exe文件的终极指南 摘要: 本文将通过具体步骤和示例代码,介绍如何使用Pyinstaller将Python程序打包成Windows平台上的独立可执行文件(.exe)。我们将涵盖从环境准备到打包步骤的详细过程,并提供实战演…

【IMU】 温度零偏标定

温度标定 IMU的零偏随着温度的变化而变化,在全温范围内形状各异,有些可能是单调的,有些可能出现拐点。 多项式误差温度标定 目的是对估计的参数进行温度补偿,获取不同温度时的参数值(零偏、尺度、正交)&…

向github远程仓库中push,要求使用token登录

Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 如上,当向github远程仓库push时,输入github的用户名和密码出现如上错误,要求使用token登录,此时只需要用户…

sm2兼容ie解决方法

1.babel-loader中include ‘node_modules/sm-crypto’ 这个包 2.如果babel版本在6以上 会报错 Couldn‘t find preset “es2015“ es2015 是一个已被废弃的 Babel 预设,它已经被 babel/preset-env 取代 安装依赖 npm install babel/preset-env --save-dev修改no…

贪心+动态规划

P5019 [NOIP2018 提高组] 铺设道路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路: 原理上就是一个差分数组,例如 4 3 2 5 3 5 这个数据 我们在其前面加上一个0作为x值,也就是(0 4 3 2 5 3 5),从…

SpringBoot + MyBatisPlus 实现多租户分库

一、引言 在如今的软件开发中,多租户(Multi-Tenancy)应用已经变得越来越常见。多租户是一种软件架构技术,它允许一个应用程序实例为多个租户提供服务。每个租户都有自己的数据和配置,但应用程序实例是共享的。而在我们的Spring Boot MyBati…

vscode运行java中文乱码,引发的mac配置问题

文章目录 问题 vscode 安装 java环境之后 public class Main{ public static void main(String[] args) { System.out.println(“哈哈”); } } ➜ .leetcode cd “/Users/leesin/.leetcode/.vscode/” && javac -encoding utf-8 Main.java && java Main &am…

Celery,一个实时处理的 Python 分布式系统

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

【高校科研前沿】中国农业大学姚晓闯老师等人在农林科学Top期刊发表长篇综述:深度学习在农田识别中的应用

文章简介 论文名称:Deep learning in cropland field identification: A review(深度学习在农田识别中的应用:综述) 第一作者及单位:Fan Xu(中国农业大学土地科学与技术学院) 通讯作者及单位&…

39 线程库

目录 thread类的简单介绍线程函数参数锁线程交替打印原子性操作库无锁CAS智能指针的线程安全单例模式的线程安全 1. thread类的简单介绍 在c11之前,涉及到多线程问题,都是和平台相关的,如windows和linux下各有自己的接口,这使得…

【STM32 ARM】区分MCU,MPU与AP

文章目录 前言微控制器(MCU)微处理器(MPU)应用处理器(AP) 总结 前言 在嵌入式系统的世界中,我们经常会听到MCU、MPU和AP这些术语。这些都是微处理器的类型,它们在功能、性能和用途上…