获取对象集合某个字段的数据,并拼接成字符串

获取对象集合某个字段的数据,并拼接成字符串

可通过list.stream().map(类名::某字段的get方法).collect(Collectors.joining(“指定分割符”))来实现,如

public class TestListStream {

    public static void main(String[] args) {

        List<Stu> list = new ArrayList<Stu>();
        list.add(new Stu("person1", "111111111", 12, false));
        list.add(new Stu("person2", null, 12, false));
        list.add(new Stu("person3", "222222222", 16, false));
        list.add(new Stu("person4", "333333333", 14, true));
        list.add(new Stu("person5", "444444444", 13, true));
        list.add(new Stu("person6", "555555555", 12, true));

        String str = list.stream().map(Stu::getPhone).collect(Collectors.joining(","));
        
        System.out.println(str);
        

    }
}

class Stu{

    String name;
    String phone;
    int age;
    boolean flag;
    
    public Stu(String name, String phone, int age, boolean flag) {
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.flag = flag;
    }
}

但是如果某个对象的目标字段为空,则会拼接一个字符串为null的数据,如下图

在这里插入图片描述
解决方法:可以在获取目标字段前加个判断,这里直接使用stream()的filter方法(判空方法很多,这里随便简单写一个)

String str = list.stream()
.filter(stu -> stu.getPhone() != null)
.map(Stu::getPhone).collect(Collectors.joining(","));

再次执行,问题解决

在这里插入图片描述
Collections.stream()的功能远不止这些,其他还有例如:循环遍历forEach、去重distinct、限制个数limit以及获取符合条件的第一个元素findFirst等等,也可以获取对象某个属性转成List<T>集合,例如想获取上面Stu对象的phone字段转成List<String>集合,可通过以下方法获取:

List<String> phones = list.stream().map(stu-> stu.getPhone()).collect(Collectors.toList());

还有以对象某个字段作为key,转成Map<T, List<T>>(也就是分组),例如获取上面Stu的age字段当成key,统计所有相同age的List<Stu>可通过以下方式获取:

Map<Integer, List<Stu>> stuMaps = list.stream().collect(Collectors.groupingBy(Stu::getAge));
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值