zoukankan      html  css  js  c++  java
  • java8 lambda表达式的一些用法

    用 lamdba 表达式操作 对象集合的比较 优雅。代码也比较简洁。 希望大家掌握(可以避免写foreach 循环)。
     
    下面是实例代码(入门级,需要高级应用,自己得百度或者研究了)
     
    /**
     * Project Name:test
     * File Name:myTest.java
     * Package Name:test
     * Date:2016年8月15日下午5:39:50
     * Copyright (c) 2016, 22124010@qq.com All Rights Reserved.
     *
    */
    
    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    /**
     * ClassName:myTest Function: TODO ADD FUNCTION. Date: 2016年8月15日 下午5:39:50
     * 
     * @author lgy
     * @since JDK 1.8
     */
    public class myTest {
    
    	public static void main(String[] args) {
                    
                    //初始对象并准备集合数据
    		myObject obj1 = new myObject();
    		obj1.setX(1);
    		obj1.setY(1);
    		obj1.setText("a");
    
    		myObject obj2 = new myObject();
    		obj2.setX(2);
    		obj2.setY(2);
    		obj2.setText("a");
    
    		myObject obj3 = new myObject();
    		obj3.setX(3);
    		obj3.setY(3);
    		obj3.setText("a");
    
    		myObject obj4 = new myObject();
    		obj4.setX(4);
    		obj4.setY(4);
    		obj4.setText("d");
    
    		myObject obj5 = new myObject();
    		obj5.setX(5);
    		obj5.setY(5);
    		obj5.setText("d");
    
    		List<myObject> ls = new ArrayList<myObject>();
    		ls.add(obj1);
    		ls.add(obj2);
    		ls.add(obj3);
    		ls.add(obj4);
    		ls.add(obj5);
    
    		/** 把x >= 3 的集合找出来 **/
    		List<myObject> filter1 = ls.stream().filter(t -> t.x >= 3).collect(Collectors.toList());
    
    		filter1.forEach(t -> System.out.println(t.x));
    
    		/** 求text=d 的记录总数 **/
    		long count = ls.stream().filter(t -> t.text == "d").count();
    
    		System.out.println(count);
    
    		/** 汇总x,y,及(x+y) 集合 **/
    
    		// 求x总和
    		int xSum = ls.stream().mapToInt(item -> item.x).sum();
    		System.out.println(xSum);
    
    		// 求y总和
    		int ySum = ls.stream().mapToInt(item -> item.y).sum();
    		System.out.println(ySum);
    
    		// 求x+y总和
    		int Sum = ls.stream().mapToInt(item -> item.x + item.y).sum();
    		System.out.println(Sum);
    
    		// 求x平均值
    		double xAvg = ls.stream().mapToDouble(item -> item.x).average().getAsDouble();
    		System.out.println(xAvg);
    
    		// 根据text统计x,y的总和
    		Map<String, Integer> group1 = ls.stream()
    				.collect(Collectors.groupingBy(t -> t.text, Collectors.summingInt(t -> t.x)));
    
    		System.out.println("a:" + group1.get("a"));
    		System.out.println("d:" + group1.get("d"));
    
    		// 过滤text=d 的记录,并把x值都设置为10
    		ls.stream().filter(t -> t.text == "d").forEach(s -> s.setX(10));
    
    		ls.forEach(t -> System.out.println(t.x));
    
    	}
    }
    
    //实体对象类
    public class myObject {
    	int x;
    	int y;
    	String text;
    
    	public int getX() {
    		return x;
    	}
    
    	public void setX(int x) {
    		this.x = x;
    	}
    
    	public int getY() {
    		return y;
    	}
    
    	public void setY(int y) {
    		this.y = y;
    	}
    
    	public String getText() {
    		return text;
    	}
    
    	public void setText(String text) {
    		this.text = text;
    	}
    }
    

      这里有个提醒,filter 如果是比较两个字符串,最好用equals 操作。x.equals 操作必须保证 x 不是个空值,不然会包空指针异常

  • 相关阅读:
    【企业通讯录app番外篇】怎么样创建服务端?
    【android】activity的4种启动模式简介
    【android】开源一个企业通讯录app
    【android】来电悬浮窗
    【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!
    【android】开发笔记---存储篇
    【android】activity、fragment传值例子
    写给过去了的那段时光
    react前端自动化webpack配置
    玩转webpack之webpack的entry output
  • 原文地址:https://www.cnblogs.com/liguoyi/p/5899179.html
Copyright © 2011-2022 走看看