提取集合中元素的某个属性组成String类型的集合,并且属性的值要非null,最后拼接该String类型的集合得到字符串

一、String类型的集合拼接得到字符串

方法一:
使用的是Java 8或更高版本,可以使用String.join()方法,这个方法可以非常方便地将一个集合中的元素拼接成一个字符串,并允许你指定分隔符。

import java.util.ArrayList;  
import java.util.List;  
  
public class ListToStringExample {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<>();  
        list.add("Hello");  
        list.add("World");  
        list.add("!");  
  
        String result = String.join(" ", list); // 使用空格作为分隔符  
        System.out.println(result); // 输出:Hello World !  
    }  
}

方法二:使用StringBuilder或StringBuffer
这是手动拼接字符串的一种常用方法,尤其适合在循环中拼接字符串,因为它比使用+操作符更高效。

import java.util.ArrayList;  
import java.util.List;  
  
public class ListToStringExample {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<>();  
        list.add("Hello");  
        list.add("World");  
        list.add("!");  
  
        StringBuilder sb = new StringBuilder();  
        for (String item : list) {  
            sb.append(item).append(" "); // 在每个元素后添加空格作为分隔符,可以根据需要调整  
        }  
  
        // 移除最后一个多余的空格(如果有的话)  
        if (sb.length() > 0) {  
            sb.setLength(sb.length() - 1);  
        }  
  
        String result = sb.toString();  
        System.out.println(result); // 输出:Hello World !  
    }  
}

二、提取对象的属性,并且过滤掉属性值为null

import java.util.Arrays;  
import java.util.List;  
import java.util.stream.Collectors;  
  
public class Main {  
    public static void main(String[] args) {  
        List<Person> people = Arrays.asList(  
            new Person("Alice", 30),  
            new Person(null, 25),  
            new Person("Charlie", 35)  
        );  
  
        // 使用Stream API过滤出所有name非null的Person对象的name  
        List<String> nonNullNames = people.stream()  
            .filter(person -> person.getName() != null) // 过滤出name非null的Person  
            .map(Person::getName) // 映射出Person的name属性  
            .collect(Collectors.toList()); // 收集结果到List  
  
        // 输出结果  
        nonNullNames.forEach(System.out::println);  
    }  
}

三、场景

提取集合中元素的对象的某个属性组成String类型的集合,过滤属性的值要非null,最后拼接String类型的集合得到字符串。
注意:map()方法可以提取对象的name属性为null的情况;String.join(“分隔符”,list) 方法能直接拼接集合里的null值。distinct()方法也能对null进行去重。

  public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();
        Person person4 = new Person();
        Person person5 = new Person();
        Person person6 = new Person();
        List<Person> people = new ArrayList<>();
        person1.setId(1);
        person1.setName("小米");
        person2.setId(2);
        person2.setName("小张");
        person3.setId(3);
        person3.setName(null);
        people.add(person1);
        people.add(person2);
        people.add(person3);
        
 		List<Person> people1 = new ArrayList<>();
        person4.setId(4);
        person4.setName(null);
        person5.setId(5);
        person5.setName(null);
        person6.setId(6);
        person6.setName(null);
        people1.add(person4);
        people1.add(person5);
        people1.add(person6);

        //1、过滤出people集合元素里的name,并且name要非null
        List<String> nonNullNames = people.stream()
                .filter(person -> person.getName() != null) // 过滤出name非null的Person
                .map(Person::getName) // 映射出Person的name属性
                .collect(Collectors.toList()); // 收集结果到List

        // 输出结果
        nonNullNames.forEach(System.out::println);

        //集合中的拼接name
        String resultS = String.join(",", nonNullNames); // 使用,作为分隔符
        System.out.println(resultS);

        System.out.println("-------------------------------------------------------");

        //2、map()方法可以提取对象的name属性为null的情况吗 --可以
        List<String> nonNullNames1 = people.stream()
                .map(Person::getName) // 映射出Person的name属性
                .collect(Collectors.toList()); // 收集结果到List
        nonNullNames1.forEach(System.out::println);

        //String.join 方法能直接拼接null值吗 --可以
        String resultS1 = String.join(",", nonNullNames1); // 使用,作为分隔符
        System.out.println(resultS1); //小米,小张,null

        System.out.println("--------------------------都是null----------------------------");
		//3、都是null的List集合大小为0,对size=0的集合进行String.join的拼接是没有结果的
        List<String> nonNullNames2 = people1.stream()
                .filter(person -> person.getName() != null) // 过滤出name非null的Person
                .map(Person::getName) // 映射出Person的name属性
                .collect(Collectors.toList()); // 收集结果到List
        int nonlen = nonNullNames2.size();
        System.out.println("都是null时进行过滤,list集合大小:" + nonlen); //0
        // 输出结果
        nonNullNames2.forEach(System.out::println); //没有

        //拼接集合中的name
        String resultS2 = String.join(",", nonNullNames2); // 使用逗号 ,作为分隔符
        System.out.println(resultS2); //没有输出,对size=0的集合进行String.join的拼接是没有结果的
    
//4、场景应用:如果查询的点检对象都是null,即过滤非null后的集合大小就是size=0的,那就直接set点检对象为空字符串;点检对象不是null,那么			 过滤非null后的集合大小不为0,那就用String.join 拼接集合。集合有id和name,查出的areaId有值并且相同都是123,name是null,这样的数据有3个,进行映射时不会映射为一个{"areaId":"123","name":null},应该是映射为了三组{"areaId":"123","name":null}。所以不过滤name为null值就进行拼接,会得到null,null,null

结果:
在这里插入图片描述

//5、distinct()可以对null值去重
    	List<Person> people2 = new ArrayList<>();
   		person7.setId(7);
        person7.setName(null);
        person8.setId(8);
        person8.setName(null);
        people2.add(person8);
        people2.add(person7);
 System.out.println("------------------------distinct对null值去重-------------------------------");
        List<String> nonNullNames3 = people2.stream()
                .map(Person::getName)
                .distinct() // 映射出Person的name属性
                .collect(Collectors.toList()); // 收集结果到List
        nonNullNames3.forEach(System.out::println); //null

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值