lambda常用操作

 8种常见操作:

  1. 分组:Collectors.groupBy()
  2. 排序:sort()
  3. 去重:stream().distinct()
  4. 过滤:stream().filter()
  5. 平均值:Collectors.averagingInt()
  6. 最值:map().min()/max()
  7. 求和:mapToInt()
  8. 重组:map()

小技巧:(习惯就好,只是API的调用,没有什么理解的,方便记忆而已)

  • Collectors工具能做的操作,无需遍历(不调用map()方法):分组、平均值
  • 对于需要遍历的使用map()方法:最值、求和
  • 过滤、查重;排序 
  • 特殊记忆BigDecimal类型数据的求和
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class LambdaTest {
	
/**
 * @author: renhuibo
 * @date:   2019年1月29日 下午3:45:57   
 * User:
 * 	private String uid;
 *	private String name;
 *	private Integer age;
 *	private String city;
 *	private BigDecimal money;
 *	private Date birth;
 */
	public static void main(String[] args) {
		List<User> users = new ArrayList<>();
		User u1 = new User("001", "笑话", 23, "GZ", new BigDecimal(2000000),setDate("2011-01-01 05:30:00"));
		User u11 = new User("001", "笑话", 24, "GZ", new BigDecimal(2000000),setDate("2011-01-01 05:30:00"));
		User u12 = new User("001", "笑话", 24, "GZ", new BigDecimal(2000000),setDate("2011-01-01 05:30:00"));
		User u2 = new User("002", "笑话", 24, "BJ", new BigDecimal(1000000),setDate("2010-01-01 05:30:00"));
		User u3 = new User("003", "笑话", 23, "GZ", new BigDecimal(2050000),setDate("2012-01-01 05:30:00"));
		User u4 = new User("004", "笑话", 29, "SH", new BigDecimal(2040000),setDate("2013-01-01 05:30:00"));
		User u5 = new User("005", "笑话", 23, "HZ", new BigDecimal(2120000),setDate("2014-01-01 05:30:00"));
		users.add(u1);
		users.add(u11);
		users.add(u2);
		users.add(u3);
		users.add(u4);
		users.add(u5);
//		lambdaGroup(users);
//		lambdaSort(users);
//		lambdaDistinct(users);
//		lambdaFilter(users);
//		lambdaSum(users, 0);
//		lambdaSum(users,1);
//		lambdaMaxMin(users,0);
//		lambdaMaxMin(users,1);
//		lambdaMaxMin(users,2);
//		lambdaMaxMin(users,3);
//		lambdaAvg(users);
		lambdaNewList(users);
	}
	
	public static void lambdaGroup(List<User> users) {
		Map<String, List<User>> groups = users.stream().collect(Collectors.groupingBy(User::getCity));
		groups.forEach((a,b) -> {
			System.out.println(a+":");
			b.forEach(c->{
				System.out.println(c.toString());
			});
			System.out.println();
		});
	}
	
	public static void lambdaSort(List<User> users) {
		users.sort(Comparator.comparing(User::getUid).thenComparing(User::getAge));
		users.forEach(a -> {
			System.out.println(a);
		});
	}
	
	public static void lambdaDistinct(List<User> users) {
		users.stream().distinct().collect(Collectors.toList());
		users.forEach(a -> {
			System.out.println(a);
		});
	}
	
	public static void lambdaFilter(List<User> users) {
		List<User> filterUser = users.stream().filter(a -> a.getAge()>23).collect(Collectors.toList());
		filterUser.forEach(b -> {
			System.out.println(b);
		});
	}
	
	public static void lambdaAvg(List<User> users) {
		double avgAge = users.stream().collect(Collectors.averagingInt(User::getAge)).doubleValue();
		System.out.println("平均年龄:"+avgAge);
	}
	
	public static void lambdaSum(List<User> users,int flag) {
		if(flag==0) {
			int sum = users.stream().mapToInt(User::getAge).sum();
			System.out.println("基本数据类型-Sum:"+sum);
		}else {
			BigDecimal sum = users.stream().map(User::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
			System.out.println("BigDecimal-Sum:"+sum);
		}
	}
	
	public static void lambdaMaxMin(List<User> users,int flag) {
		int res = 0;
		if(flag==0) {
			res = users.stream().map(User::getAge).max(Integer::compareTo).get();
			System.out.println("最大值:"+res);
		}else if(flag==1){
			res = users.stream().map(User::getAge).min(Integer::compareTo).get();
			System.out.println("最小值:"+res);
		}else if(flag==2){
			Date date = users.stream().map(User::getBirth).max(Date::compareTo).get();
			System.out.println("最晚出生:"+formatDate(date));
		}else if(flag==3) {
			Date date = users.stream().map(User::getBirth).min(Date::compareTo).get();
			System.out.println("最早出生:"+formatDate(date));
		}
	}
	
	public static void lambdaNewList(List<User> users) {
		List<String> citys = users.stream().map(a -> a.getCity()).collect(Collectors.toList());
		citys.forEach(c -> {
			System.out.println(c);
		});
	}
	
	public static Date setDate(String date) {
		Date dateFormat = null;
		try {
			dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dateFormat;
	}
	
	public static String formatDate(Date date) {
		String dateFormat = "";
		try {
			dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
		}catch(Exception e) {
			dateFormat = "格式异常";
		}
		return dateFormat;
	}
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值