Java8 使用流抽取List<T>集合中T的某个属性操作

 更新时间:2021年02月04日 14:23:19   作者:qq_38524629  
这篇文章主要介绍了Java8 使用流抽取List<T>集合中T的某个属性操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在java开发中,我们经常会遇到需要从一个集合中,抽取集合中元素的某一个属性。在java8之前,我们通常采用for循环去获取,但java8之后我们有了一种新的办法,那就是stream。

话不多说,直接上代码

import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author lanfangyi
 * @version 1.0
 * @since 2019/5/12 13:22
 */
@Data
@AllArgsConstructor
public class User {
  private Long id;
  private String name;
}
class TestMainService {
  public static void main(String[] args) {
    List<User> userList = new ArrayList<>();
    User user = new User(1L, "zhangsan");
    User user1 = new User(2L, "lisi");
    userList.add(user);
    userList.add(user1);
    List<Long> userIds = new ArrayList<>();
    //第一种方式
    userList.forEach(user2 -> {
      userIds.add(user2.getId());
      //这里可以进行更多的操作
    });
    System.out.println(userIds);
    //第二种方式
    List<Long> userIds2 = userList.stream().map(User::getId).collect(Collectors.toList());
    System.out.println(userIds2);
  }
}

打印结果:

[1, 2]
[1, 2]

补充:Java根据类属性值从一个集合中找到和该属性相等的对象

方法

使用common-utils包提供的CollectionUtils和BeanPropertyValueEqualsPredicate

比如找id属性值为9587的用户

Object obj = CollectionUtils.find(UserList.get(), 
new BeanPropertyValueEqualsPredicate("id", "9587"));
if(obj == null){
  log.info("not found");
}else{
  //do your thing
}

find方法实现的大概思路

public static <T> T findElementByPropertyValue(List<T> list, String propertyName, Object value) throws Exception {
  if(list == null || list.isEmpty()) {
    return null;
  }
  PropertyDescriptor pd = new PropertyDescriptor(propertyName, list.get(0).getClass());
  for (T t : list) {
    Object obj = pd.getReadMethod().invoke(t);
    if(StringUtils.equals(String.valueOf(value), String.valueOf(obj))) {
      return t;
    }
  }
  return null;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • JDK1.8、JDK1.7、JDK1.6区别看这里

    JDK1.8、JDK1.7、JDK1.6区别看这里

    这篇文章主要为大家详细介绍了JDK1.8、JDK1.7、JDK1.6中的源码,对比阅读,发现修改问题以及改进点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 深入学习java位运算的基础知识

    深入学习java位运算的基础知识

    位运算是直接对整数在内存中的二进制位进行操作吗,位运算即可以节约内存,同时使程序速度更快效率更高。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来一起学习下吧
    2019-06-06
  • Java Calendar日历类原理及使用方法

    Java Calendar日历类原理及使用方法

    这篇文章主要介绍了Java Calendar日历类原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java使用GZIP压缩导致HTTP请求返回乱码问题解决

    Java使用GZIP压缩导致HTTP请求返回乱码问题解决

    这篇文章主要为大家介绍了Java压缩GZIP导致HTTP请求返回乱码问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java编程语言特性和优势

    Java编程语言特性和优势

    这篇文章主要介绍了Java编程语言特性和优势,Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼,下面来聊聊Java编程语言特性和优势吧
    2022-01-01
  • 详解Java中如何使用日志库在代码中添加日志

    详解Java中如何使用日志库在代码中添加日志

    这篇文章主要为大家介绍了Java中如何使用日志库在代码中添加日志详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • java并发编程专题(八)----(JUC)实例讲解CountDownLatch

    java并发编程专题(八)----(JUC)实例讲解CountDownLatch

    这篇文章主要介绍了java CountDownLatch的相关资料,文中示例代码非常详细,帮助大家理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java日常练习题,每天进步一点点(47)

    Java日常练习题,每天进步一点点(47)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-08-08
  • json转换成java对象示例

    json转换成java对象示例

    这篇文章主要介绍了json转换成java对象示例,需要的朋友可以参考下
    2014-04-04
  • Java TreeMap升序|降序排列和按照value进行排序的案例

    Java TreeMap升序|降序排列和按照value进行排序的案例

    这篇文章主要介绍了Java TreeMap升序|降序排列和按照value进行排序的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论