链接: 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);