首页 > 代码库 > java8 lambda表达式的一些用法

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 不是个空值,不然会包空指针异常

java8 lambda表达式的一些用法