1. 程式人生 > 其它 >Java-Collection、Map及Array之間的轉換

Java-Collection、Map及Array之間的轉換

1 List -> Map

設個User類:

public class User {
private String userName;
private String userId;
private String userInfo;

public User(){}

public User(String userName, String userId, String userInfo) {
this.userName = userName;
this.userId = userId;
this.userInfo = userInfo;
}

//getter setter
}

1)foreach()方法

//foreach
public Map<String,User> ltmForEach(List<User> list){
Map<String,User> map = new HashMap<>();
list.forEach(user -> {
map.put(user.getUserId(), user);
});
return map;
}

2)collect()方法

//collect()
public Map<String,User> ltmStream(List<User> list){
/**
* Collectors.toMap()方法引數:
* keyMapper: User::getUserId,呼叫User的getter方法
* valueMapper: user->user, User類作為value
* mergeFunction: 當key衝突時,value合併的方法:(n1,n2)->n2為替換,(n1,n2)->n1+n2為累加
* mapSupplier: Map構造器,需要返回特定Map的時候使用,如TreeMap::new返回以key排序的Map
*/
return list.stream()
.collect(Collectors.toMap(User::getUserId,user->user,(n1,n2)->n2,TreeMap::new));

}

3)Map常用遍歷方法

// 1. 增強for迴圈
Map<String, User> ltmStreamMap = l.ltmStream(list);
for(Map.Entry entry : ltmStreamMap.entrySet()){
System.out.println(entry.getKey()+" : "+entry.getValue());
}

// 2. Iterator迭代器
Map<String, User> ltmForEachMap = l.ltmForEach(list);
Iterator<Map.Entry<String, User>> iterator = ltmForEachMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, User> next = iterator.next();
System.out.println(next.getKey()+" : "+next.getValue());
}

// 3. 內迴圈
Map<String, User> ltmForEachMap = l.ltmForEach(list);
ltmForEachMap.forEach((k,v)->{
System.out.println(k+" : "+v);
});

2 Array -> List

Array指陣列型別資料,如:String[]、Object[]、int[]等

一般使用工具類Arrays的asList方法:

public class arrayToList {
public static void main(String[] args) {
String[] strs = new String[]{"a","b","c"};
List<String> list = Arrays.asList(strs);
for(String str : list){
System.out.println(str);
}
}
}

3 List -> Array

集合List轉為陣列型別Array

通常使用Collection的toArray方法

public class listToArray {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
//List->Array,申請大小為list.size()的陣列空間
String[] strs = list.toArray(new String[list.size()]);
}
}

4 Array <-> Set

public class arrayToSet {
public static void main(String[] args) {
/**
* Array陣列型別轉為Set型別集合
* 需要Array->List->Set
*/
String[] strs = new String[]{"a","b","c"};
Set<String> set = new HashSet<>(Arrays.asList(strs));

/**
* Set轉為Array和List轉為Array原理相同
*/
strs = set.toArray(new String[set.size()]);
}
}

5 List <-> Set

List和Set都實現了Collection藉口,Collection.addAll()方法

相互轉換可以通過:

  1)Collection.addAll()

  2)構造方法直接傳入List/Set

/** * List -> Set
*/
Set set = new HashSet(list);//構造傳參
set.addAll(list);//Collection.addAll()

/**
* Set -> List
*/
List list = new ArrayList(set);
list.addAll(set);