当前位置:首页 > JAVA > 正文内容

Java 如何提取列表中对象某个属性值并去重

高老师1年前 (2023-10-26)JAVA255

在 Java 中,有时候需要从一个对象列表中提取某个属性值,并去除重复的值。本文将介绍两种方式来实现这个操作。

方式一:使用 Stream API

Java 8 引入了 Stream API,可以方便地对集合进行处理。我们可以使用 Stream API 的 map() 方法来提取对象列表中的某个属性值,并使用 distinct() 方法去重,最后使用 collect() 方法将结果转换为列表。

示例代码如下:

List<String> propertyValues = objectList.stream()
                                        .map(YourObject::getPropertyName)
                                        .distinct()
                                        .collect(Collectors.toList());



其中,objectList 表示对象列表,YourObject 是对象的类型,getPropertyName() 是获取属性值的方法名,propertyValues 是最终的结果列表。

方式二:自行封装方法

我们也可以自行封装一个方法来实现这个操作。定义一个泛型接口 StringFun,用于获取对象的字符串值。然后,在方法中遍历对象列表,使用该接口的实现来获取属性值,并将不重复的值添加到结果列表中。

示例代码如下:

public interface StringFun<T> {
    String getVal(T t);}public static <T> List<String> distinct(List<T> list, StringFun<T> func) {
    List<String> ls = new ArrayList<String>();
    for (T t : list) {
        String val = func.getVal(t);
        if (!ls.contains(val)) {
            ls.add(val);
        }
    }
    return ls;}

其中,list 表示对象列表,func 是一个 StringFun 类型的实例,用于获取属性值。最终的结果是一个字符串列表。

调用方式如下:

List<String> skuIds = ListUtil.distinct(subs, BillsSuperclassSubNum::getClothingId);

其中,subs 表示对象列表,BillsSuperclassSubNum 是对象的类型,getClothingId() 是获取属性值的方法名,skuIds 是最终的结果列表。

如果想要使用 lambda 表达式来简化代码,调用方式如下:

List<String> skuIds = ListUtil.distinct(subs, preSaleTableSubNum -> preSaleTableSubNum.getClothingId());

如果属性值的获取方法是对象的静态方法,可以使用方法引用来进一步简化代码,调用方式如下:

List<String> skuIds = ListUtil.distinct(subs, BillsSuperclassSubNum::getClothingId);

总结:

本文介绍了两种方式来提取 Java 对象列表中的某个属性值,并去重。使用 Stream API 可以简化代码,而自行封装方法则更加灵活,可以根据具体需求来定制获取属性值的方式。


扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/660.html

分享给朋友:

“Java 如何提取列表中对象某个属性值并去重” 的相关文章

 java字节与字符的区别,字节与字的区别与联系

java字节与字符的区别,字节与字的区别与联系

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。一般在英文...

Java不用编译直接执行

Java不用编译直接执行

public class test {     public static void main(String[] args) {     &...

java限制1个方法同一时间只能被一个线程访问

java限制1个方法同一时间只能被一个线程访问

java限制1个方法同一时间只能被一个线程访问public synchronized void setOrderPay(){ }加上synchronized 修饰符即可...

java final 修饰符,java通过final修饰符创建常量,,java通过final修饰符声明方法不可被修改

java final 修饰符,java通过final修饰符创建常量,,java通过final修饰符声明方法不可被修改

(1).final 修饰符通常和 static 修饰符一起使用来创建类常量。(2).父类中的 final 方法可以被子类继承,但是不能被子类重写,声明 final 方法的主要目的是防止该方法的内容被修改。public class Member {   ...

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java判断字符是否是一个字母System.out.println(Character.isLetter('a'));java判断字符是否是一个数字System.out.println(Character.isDigit('0'));java判断字符是否是一个空白Sy...

java stringBuffer,java stringBuffer反转字符串,java stringBuffer delete删除字符/移除字符,java stringBuffer在指定位置插入字符串,java stringBuffer替换指定位置的字符串,java stringBuffer获取指定索引的值

java stringBuffer,java stringBuffer反转字符串,java stringBuffer delete删除字符/移除字符,java stringBuffer在指定位置插入字符串,java stringBuffer替换指定位置的字符串,java stringBuffer获取指定索引的值

java stringBuffer(1).stringBuffer和stringBuilder区别stringBuffer是线程安全的,stringBuilder速度更快(2).简单的stringBuffer例子StringBuffer sBuffer = new&nb...