一、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