數(shù)據(jù)準(zhǔn)備
@Data
public class User {
private Long id;
private Integer schoolId;
private String userName;
private String edu;
private double price;
public static List<User> users = new ArrayList<>();
static {
User u1 = new User();
u1.setId(1001L);
u1.setSchoolId(100);
u1.setUserName("小1");
u1.setEdu("001");
u1.setPrice(0.01);
User u2 = new User();
u2.setId(1002L);
u2.setSchoolId(100);
u2.setUserName("小2");
u2.setEdu("002");
u2.setPrice(0.20);
User u3 = new User();
u3.setId(2010L);
u3.setSchoolId(200);
u3.setUserName("小3");
u3.setEdu("001");
u3.setPrice(3.00);
User u4 = new User();
u4.setId(3001L);
u4.setSchoolId(300);
u4.setEdu("001");
u4.setPrice(40.0);
users.add(u1);
users.add(u2);
users.add(u3);
users.add(u4);
}
}
1. 使用mapToXxx進(jìn)行統(tǒng)計(jì)
public class TestMapToXx {
public static void main(String[] args) {
//將原始對(duì)象直接映射為Int類型
IntStream intStream = User.users.stream().mapToInt(User::getSchoolId);
//最大值
OptionalInt max = intStream.max();
//最小值
OptionalInt min = intStream.min();
//求和
int sum = intStream.sum();
//統(tǒng)計(jì)值
long count = intStream.count();
//平均值
OptionalDouble average = intStream.average();
//若是空指針您没,直接返回0.00
double avg = average.orElse(0.00);
DoubleStream doubleStream = User.users.stream().mapToDouble(User::getPrice);
LongStream longStream = User.users.stream().mapToLong(User::getId);
}
}
2. 使用reduce進(jìn)行統(tǒng)計(jì)
public class TestMapToXx {
public static void main(String[] args) {
//獲取最大值
OptionalDouble maxReduce = User.users.stream().mapToDouble(User::getPrice).reduce(Double::max);
double max = maxReduce.orElse(0);
System.out.println(max);
//求和
OptionalDouble sumReduce = User.users.stream().mapToDouble(User::getPrice).reduce(Double::sum);
double sum = sumReduce.orElse(0);
System.out.println(sum);
}
}
3. 使用summarizingXxx進(jìn)行統(tǒng)計(jì)
private static void test1() {
DoubleSummaryStatistics collect = User.users.stream().collect(Collectors.summarizingDouble(User::getPrice));
double average = collect.getAverage();
long count = collect.getCount();
double max = collect.getMax();
double min = collect.getMin();
double sum = collect.getSum();
}
4. 使用min或者max
private static void test1() {
Optional<String> max = User.users.stream().map(User::getUserName).max((o1, o2) -> o2.compareTo(o1));
//等效于正常順序降序排序取最大值
Optional<String> max1 = User.users.stream().map(User::getUserName).max(Comparator.reverseOrder());
//正常的順序求最大值
Optional<Long> min = User.users.stream().map(User::getId).min(Comparator.naturalOrder());
}
推薦閱讀
JDK8對(duì)List進(jìn)行分組操作(stream的groupby)