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