在需求中,有这么一段,是从获得的设备列表(json类型)中获得特定条件的设备,例如未损坏,未使用中的设备等等,由于是一个非构造型的集合,所以就联想到了当时用C#的时候在下面用lambda表达式查询集合中需要的值的方法了,正好在java8的时候引入了这个特性,索性可以尝试一下,但是因为用的json对象,想要获得对应字段的值非常不好转换,所以作罢,然后用刀了一个吧json转换为pojo的类之后,这样做就省了不少的事情。
一、使用lambda进行条件查询
用我们自带的pojo做了一个最简单的例子:
public static void main(String[] arg){
List<McSceneOrder> settingList=new ArrayList<>(); //数据源
List<McSceneOrder> settingList2=new ArrayList<>(); 结果列
for(int i=0;i<10;i++){ //循环生成 序列at:+数字的结果
McSceneOrder mcSceneOrder=new McSceneOrder();
mcSceneOrder.setSceneOrderId(i);
mcSceneOrder.setSceneOrderNum("序列at:" + i);
settingList.add(mcSceneOrder);
}
//筛选id不等于10的数据
settingList2=settingList.stream().filter(s->s.getSceneOrderId()!=10).collect(Collectors.toList());
//输出结果
settingList2.forEach(mso -> System.out.println(mso.getSceneOrderNum()));
}
结果:
这个简单的例子就用了stream里面的filter方法,然后再filter中写入lambda表达式就可以了。最后用collect转换成了list类型返回给了带接收的list,最后用foreach方法通过lambda遍历出了我们想要输出的结果。其中s和mso都可以是任意的字符。
这个例子里面用了两个写lambda的方法,一个是stream的filter,另外一个是foreach。
二、更多用法
1、使用map方法可以使用一套方法处理数据:
List<String> list1 = Lists.newArrayList();
List<String> list2 = Lists.newArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
list2 = list1.stream().map(string -> {
return "stream().map()处理之后:" + string;
}).collect(Collectors.toList());
list2.stream().forEach(string -> {
System.out.println(string);
});
运行结果:
stream().map()处理之后:1
stream().map()处理之后:2
stream().map()处理之后:3
2、加入reduce对于数据处理:
// 为每个订单加上12%的税
// 老方法:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
double total = 0;
for (Integer cost : costBeforeTax) {
double price = cost + .12*cost;
total = total + price;
}
System.out.println("Total : " + total);
// 新方法:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
double bill = costBeforeTax.stream().map((cost) -> cost + .12*cost).reduce((sum, cost) -> sum + cost).get();
System.out.println("Total : " + bill);
3、匿名类的使用:
() -> System.out.println("Hello Lambda Expressions");
上面一句话直接回输出你想要输出的语句。
(int even, int odd) -> even + odd
或者加上参数,对于参数进行操作等等。
更多的使用方法,参见:http://www.importnew.com/16436.html