【java】使用Lambda表达式

        在需求中,有这么一段,是从获得的设备列表(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

猜你喜欢

转载自blog.csdn.net/tr1912/article/details/79858618