8种常见操作:
- 分组:Collectors.groupBy()
- 排序:sort()
- 去重:stream().distinct()
- 过滤:stream().filter()
- 平均值:Collectors.averagingInt()
- 最值:map().min()/max()
- 求和:mapToInt()
- 重组: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;
}
}