在使用java语言开发项目的过程中,经常会用到list和map对数据进行组装,处理相应的业务逻辑,现将常用的写法总结一下,供大家参考。
1、数组转List
Arrays.asList(k.split(","))
//判断集合是否为空
/if (CollectionUtils.isEmpty(list)) {return Collections.emptyList();}/
//集合转数组
List<String> list = new ArrayList<>();
String[] pkArchiveFiles = list.toArray(new String[list.size()]);
2、java8写法
List list = new ArrayList();
//java8 将list判空,遍历,过滤,装成集合
List listFilter = Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().filter(test->"id1".equals(test.getId())).collect(Collections.toList());
//java8 将list判空,遍历,输出对象属性值
Optional.ofNullable(list).orElseGet(Collections::emptyList).forEach(test -> {
System.out.println(test.getId());
})
//如果map不为空 则返回 map 如果为空 则调用orElseGet() 方法 new Map
Map resultMap = Optional.ofNullable(map).orElseGet(HashMap::new);
//取list某个字段到另一个集合
list stringList = list.stream().map(Test::getId).collect(Collectors.toList());
//list根据转map(根据某个属性和字段)
HashMap mainUserMap = Optional.ofNullable(mainUserList).orElseGet(Collections::emptyList)
.stream().collect(HashMap::new, (map, item) -> map.put(item.getDuty(), item), HashMap::putAll);
//list转为map
Map partNameAllMap = partNameAllList.stream().collect(Collectors.toMap(PartName::getCode, p -> p));
当存在value值为空时,使用Collectors.toMap()会报NPE
/**
* 当存在value值为空时,使用Collectors.toMap()会报NPE
* 原因:底层调用了Map的merge方法,而map方法规定了此处的vlue不能为null,从而抛出空指针异常
* Objects.requireNonNull(value);
*/
// HashMap map01 = list.stream().collect(Collectors.toMap(User::getUserName, User::getIdCard, (a, b) -> b, HashMap::new));
// System.out.println(map01);
//解决方案一,
//使用Optional类处理null HashMap<String, String> map02 = list.stream().collect(Collectors .toMap(s -> Optional.ofNullable(s.getUserName()).orElse("空的"), s -> Optional.ofNullable(s.getSex()).orElse("空的"), (a, b) -> b, HashMap::new)); System.out.println(map02);
//解决方案二,
//直接使用collect()方法进行规约操作,关于这里collect方法的使用可以看这篇文章 https://www.cnblogs.com/sueyyyy/p/13502116.html
HashMap<String, String> map03 = list.stream().collect(HashMap::new, (map, item) -> map.put(item.getUserName(), item.getSex()), HashMap::putAll); System.out.println(map03);
Optional.ofNullable说明
//如果map不为空 则返回 map 如果为空 则调用orElseGet() 方法 new Map
Map resultMap = Optional.ofNullable(map).orElseGet(HashMap::new);
//取list某个字段到另一个集合
list stringList = list.stream().map(Test::getId).collect(Collectors.toList());
list判空、遍历、过滤
List list = new ArrayList();
//java8 将list判空,遍历,过滤,装成集合
List listFilter = Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().filter(test->"id1".equals(test.getId())).collect(Collections.toList());
//java8 将list判空,遍历,输出对象属性值
Optional.ofNullable(list).orElseGet(Collections::emptyList).forEach(test -> {
System.out.println(test.getId());
})
map判空、遍历、遍历
Optional.ofNullable(map).orElseGet(HashMap::new).forEach((k,v)->{
System.out.println(k);
System.out.println(value);
})
3、使用迭代器
//map 中使用迭代器
Iterator i = map.keySet().iterator();
while (i.hasNext()) {
String key = (String) i.next();
System.out.println("\nRoll Number: " + key);
System.out.println("Name: " + student.get(key));
}
}
}
//list 中使用迭代器
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Test t = iterator.next();
System.out.println(t.getId());
}
public class TestSix {
public static void main(String[] args) {
List list = new ArrayList();
Map map = new HashMap();
map.put("id","1");
map.put("age","28");
map.put("sex","男");
//方式一 key 与 value 全部遍历
Set> entries = map.entrySet();
for (Map.Entry entry :entries) {
String key = entry.getKey();
String value = entry.getValue();
list.add(key);list.add(value);
System.out.println("key:"+key + "value:" +value);
}
//方式二 通过键找值遍历
Set strings = map.keySet();
for (String key:strings) {
System.out.println("key:"+key + "value:" +map.get(key));
}
for (String s:list) {
System.out.println("s---:"+s);
}
for(int i=0;i
System.out.println(list.get(i));
}
}
}