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 不是個空值,不然會包空指針異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM