目录
1、数组 —》 List
2、List —》 数组
3、List —》 Set / Set —》 List
4、List -》 Map
5、Map —》 List / Set
6、List —》 List / Set
将数组转换成集合,数组必须是引用数据类型,如果基本数据类型的数组转换成集合,会将整个数组当作一个对象转换 ;
Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。
private static void arrToList(){
// 基本数据类型的数组转换成集合,会将整个数组当作一个对象转换
// 输出:[[I@3830f1c0]
int[] arr = {1, 2, 3, 4, 5};
List list = Arrays.asList(arr);
System.out.println(list);
// 将数组转换成集合,数组必须是引用数据类型
// 輸出:[1, 2, 3, 4, 5]
Integer[] arr2 = {1, 2, 3, 4, 5};
// Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。
List list2 = Arrays.asList(arr2);
// 再次新建List就可以了
List list3 = new ArrayList<>(list2);
list3.add(7);
System.out.println(list2);
System.out.println(list3);
}
private static void arrToList(){
// 数组必须是引用数据类型
List list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
list.add("1-"+i);
}
String[] arr = new String[list.size()];
list.toArray(arr);
System.out.println(Arrays.toString(arr));
}
将 List 集合转为 Set 集合,是可以直接去重的。
private static void listToSet(){
List list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
list.add("1-"+i);
}
// 直接new一个对象,将list放入即可
Set set = new HashSet<>(list);
System.out.println(set.toString());
}
Set 集合转 List 集合类似,直接 new 一个 List 对象,将 set 集合放入即可
如果我们的 List 存放的对象,我们想要将其转化为 Map 集合,key为对象的某个属性。(使用Stream流实现)
实体类:
/**
* @author MouFangCai
* @date 2019/8/2 10:41
*/
public class TestEntity {
private Integer id;
private String name;
@Override
public String toString() {
return "TestEntity{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
private static void listToMap(){
List list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
TestEntity testEntity = new TestEntity();
testEntity.setId(i);
testEntity.setName("name-"+i);
list.add(testEntity);
}
System.out.println(list.toString());
// 使用stream流的方式实现,高效
// 此处map的key是 TestEntity的id
Map map = list.stream().collect
(Collectors.toMap(TestEntity::getId, Function.identity(), (key1, key2) -> key2));
System.out.println(map.toString());
}
private static void mapToList(){
Map map = new HashMap<>();
for (int i = 0; i < 4; i++) {
TestEntity testEntity = new TestEntity();
testEntity.setId(i);
testEntity.setName("name-"+i);
map.put(i, testEntity);
}
// 直接获取map的key的set集合
Set set1 = map.keySet();
// 将map的values 转换为Set集合
Set set = new HashSet<>(map.values());
// 将map的values 转换为List集合
List list = new ArrayList<>(map.values());
System.out.println(set.toString());
System.out.println(list.toString());
}
需求:List1 集合存放是对象,我们希望直接从集合里获取到 对象的某个属性的 List2 集合 (使用Stream流实现)
private static void listToList(){
List list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
TestEntity testEntity = new TestEntity();
testEntity.setId(i);
testEntity.setName("name-"+i);
list.add(testEntity);
}
// 获取到 name的list集合
List list1 = list.stream().map(TestEntity::getName).collect(Collectors.toList());
// 获取到 name的set集合
Set set = list.stream().map(TestEntity::getName).collect(Collectors.toSet());
System.out.println(list1.toString());
}