一. 需求:遍歷List集合,集合中的對象的某個字段是以 逗號分割的,把分割後的值保存在Set集合中
普通的寫法:
Set<String> cfgPortfolioSet = new HashSet<>(20);
for (CfgPortfolio cfgPortfolio : cfgPortfolioList) {
String compreftmp = cfgPortfolio.getComprefs();
if(!StringTools.isTrimEmpty(compreftmp)){
String[] split = compreftmp.split(",");
for (String s : split) {
cfgPortfolioSet.add(s);
}
}
}
java 8 stream流的寫法:
一行代碼搞定
Set<String> cfgPortfolioSet = cfgPortfolioList.stream().flatMap(cfgPortfolio -> {
if (StringTools.isTrimEmpty(cfgPortfolio.getComprefs())) {
return null;
}
return Arrays.stream(cfgPortfolio.getComprefs().split(","));
}).collect(Collectors.toSet());
二. 將list集合轉Set
普通list的轉集合 是for語句遍歷list,stream流直接一句代碼
// list 轉 Set
List<Man> manList = new ArrayList<>();
Man man = new Man();
man.setId("1");
man.setName("人");
manList.add(man);
Set<Man> manSet = manList.stream().collect(Collectors.toSet());
manSet.contains("1");
Iterator<Man> iterable = manSet.iterator();
while (iterable.hasNext()){
System.out.println(iterable.next().getId());
}
三. 將list集合轉Map
List<Man> manList = new ArrayList<>();
manList.add(new Man("1", "人"));
manList.add(new Man("1", "我"));
//list to map 無重複key的時候
// Map<String, Man> map1 = manList.stream().collect(Collectors.toMap(Man::getId, test->test));
//System.out.println(map1.get("1").getName());
//list to map 有重複key的時候
Map<String, Man> map = manList.stream().collect(Collectors.toMap(Man::getId, Function.identity(),(test1, test2) -> test1 ));
System.out.println(map.get("1").getName());
//list to map value值取單個字段時
Map<String, String> mapname1 = manList.stream().collect(Collectors.toMap(Man::getId, Man::getName, (man1,man2)-> man1 ));
System.out.println(mapname1.get("1"));
//list to map value值拼接
Map<String, String> mapcomb = manList.stream().collect(Collectors.toMap(Man::getId, Man::getName, (key1, key2)-> key1+","+key2));
System.out.println(mapcomb.get("1"));
// list轉map, 重複時將重複key的數據組成集合
Map<String, List<String>> maplist = manList.stream().collect(Collectors.toMap(Man::getId, p ->{
List<String> list = new ArrayList<>();
list.add(p.getName());
return list;
}, (List<String> value1, List<String> value2 )-> {value1.addAll(value2); return value1;}));
System.out.println(maplist.get("1").toString());