一、String与List<?>
互相转化
1. List<String>
转字符串
- 使用
String.join
// ,为字符串分隔符
String str = String.join(",", list);
2. 字符串转List
- 使用
Arrays.asList
// 根据,分割字符串
List<String> list = Arrays.asList(str.split(","));
注: 使用该方法转出来的list集合无法进行add、remove操作
示例:
public void test() {
//字符串转list<String>
String str = "a,b,c,d";
//此处为了将字符串中的空格去除做了一下操作
List<String> list = Arrays.asList(str .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
//list<String>转字符串(以逗号隔开)
System.out.println(String.join(",", list));
}
- 使用Stream
String str = "1,2,3,4,5";
List<String> list = Arrays.stream(str.split(","))
.map(s -> s.trim()) //trim()去掉字符串首尾空格
.collect(Collectors.toList());
List<Long> listLong = Arrays.stream(str.split(","))
.map(s -> Long.parseLong(s.trim()))
.collect(Collectors.toList())
二、List集合和数组相互转换
1. 数组转List
- 使用
java.util.Arrays
工具类中的asList()方法
String[] arrays = {"a", "b", "c"};
List<String> list = Arrays.asList(arrays);
注意 : 将数组转换List后,不能对List增删,只能查改,否则抛出UnsupportedOperationException
异常
原因解析:
Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。
使用场景:Arrays.asList(strArray)方式仅能用在将数组转换为List后,不需要增删其中的值,仅作为数据源读取使用。
- 使用Stream中的Collector收集器
String[] arrays = {"a", "b", "c"};
List<String> list = Stream.of(arrays).collect(Collectors.toList());
转换后的List 属于java.util.ArrayList
能进行正常的增删查操作。
2. List转换为数组
- 使用Stream
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String[] strings = list.stream().toArray(String[]::new);
- 使用List中的
toArray()
方法
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String[] strings = list.toArray(new String[list.size()]);
注意:数组类型和List集合类型要一致。
三、List<?>根据某个字段排序
实例:List<User> userList
,根据createTime排序
- 升序
userList.sort(Comparator.comparing(User::getCreateTime));
- 降序
userList.sort((m1, m2) -> m2.getCreateTime().compareTo(m1.getCreateTime()));
四、数组遍历
数组遍历,把数组转成List集合再遍历
String[] array = {"a", "b", "c", "d", "e"};
之前:
for(String x : array){ ... }
stream 遍历
Arrays.asList(array).stream().forEach(x -> System.out.println(x));
Arrays.asList(array).stream().forEach(System.out::println);