java8 List新特性的应用

链接: java8Stream详解.
实体类:

class Demo {
    private Long id;
    private String name;   
}

快速生成list

List<Demo> demos = Lists.newArrayList(new Demo(1L, "SF"), new Demo(2L, "AXE"));

1. map + collect快速获取集合中对象的某个属性

(1).提取Demo中id成独立的List<Long>
// 1.8之前的写法
List<Long> ids = Lists.newArrayList();
for (Demo d : demos) {
    ids.add(d.getId());
}
return ids;
//java8写法
List<Long> ids = demos.stream()
					.map(Demo::getId) //Demo 实体类 //getId 实体类中的get方法,为获取Demo的id
					.collect(Collectors.toList());
(2).提取Demo中id成map
//1.8之前写法
Map<Long, Demo> map = Maps.newHashMap;
for (Demo d : demos) {
    map.put(d.getId, d);
}
return map;
//java8写法
 Map<Long, Demo> map = demos.stream().collect(Collectors.toMap(Demo::getId, o -> o));

2. filter 根据条件过滤

(1)场景1:从List中找到name="SF"的Demo实例
//java1.8之前
Demo target = null;
for (Demo demo : demos) {
	if ("SF".equals(demo.getName())) {
	    target = demo;
	}
}
return target;
//java 1.8
String targetName = "SF";
Demo target = demos.stream()
					.filter(
						d -> targetName.equals(d.getName())
					)
					.findFirst()
					.orElse(null);
return target;

3. match

场景1:List中是否存在name="SF"的Demo实例。
//java8之前
String tagName = "SF";
List<Demo> list = new ArrayList<TestAaa.Demo>();
list.add(new Demo("SF"  , 1000L));
list.add(new Demo("SF1", 1001L));
list.add(new Demo("SF2", 1002L));
list.add(new Demo("SF3", 1003L));

boolean istrue = false;
for (Demo demo : list) {
	boolean equals = tagName.equals(demo.getName());
	if (equals) {
		istrue = equals;
	}
}
System.out.println(istrue);
//java8 filter写法
istrue = false;
istrue = list.stream().map(Demo::getName)
			.filter(n -> tagName.equals(n))
			.findAny() 	// 返回任意对象,如果list为空则返回空
			.isPresent();	// 对象是否存在?
System.out.println(istrue);
//java8 anyMatch 写法
istrue = false;
istrue = list.stream()
           .map(Demo::getName)
           .anyMatch(n -> tagName.equals(n));
System.out.println(istrue);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值