JDK1.8中List与Map常用写法总结(JAVA8)

在使用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));

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值