1. 筛选
测试对象:
publice class User{
Integer id;
String name;
double height;//身高
String score;//分数
public User(Integer id, String name, double height,String score) {
this.id = id;
this.name = name;
this.height = height;
this.height = height;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score= score;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", score='" + score + '\'' +
", height=" + height +
'}';
}
}
测试:
public static void main(String[] args) {
List<User> uList=new ArrayList<User>();
uList.add(new User(1, "xxx", 1, 18,"89.5"));
uList.add(new User(2, "zzz", 1, 19, "80"));
uList.add(new User(3, "aaa", 1, 20, "78.5"));
uList.add(new User(4, "bbb", 1, 21, "65.9"));
//筛选年龄大于19的
List<User> list = list.stream().filter(y->pd.getAge()>19).collect(Collectors.toList());
//只取年龄大于19的学生的名字
List<String> names = list.stream().filter(y->pd.getAge()>19).map(pd -> pd.getProductname()).collect(Collectors.toList());
//筛选名字是xxx的
User user = uList.stream().filter(y->pd.getName().equals("xxx")).findAny().orElse(null);
}
2. 求和、最大、最小、平均
测试:
public static void main(String[] args) {
List<User> uList=new ArrayList<User>();
uList.add(new User(1, "xxx", 1, 18,"89.5"));
uList.add(new User(2, "zzz", 1, 19, "80"));
uList.add(new User(3, "aaa", 1, 20, "78.5"));
uList.add(new User(4, "bbb", 1, 21, "65.9"));
//最大年龄
Integer maxAge=uList.stream().mapToInt(User::getAge).max().getAsInt();
System.out.println("最大年龄为:"+maxAge);
//最小年龄
Integer minAge=uList.stream().mapToInt(User::getAge).min().getAsInt();
System.out.println("最小年龄为:"+minAge);
//年龄和
Integer sumAge=uList.stream().mapToInt(User::getAge).sum();
System.out.println("年龄和为:"+sumAge);
//年龄平均值
double avgAge=uList.stream().mapToDouble(User::getAge).average().getAsDouble();
System.out.println("年龄平均值为:"+avgAge);
//已经转为String的分数平均值
Double scoreAvg= uList.stream().map(tp->Double.valueOf(tp.getScore())).mapToDouble(Double::doubleValue).average().orElse(0D):0.0;
System.out.println("分数平均值为:"+scoreAvg)
double[] d={110.12,12.3,110.23,78.9};
double minDouble=Arrays.stream(d).min().getAsDouble();
System.out.println("最小数组值:"+minDouble);
}
collect方式和mapToxx方式,源代码实现是不同的方式。
建议使用mapToxx方式。
/*
* 不允许list中存在为空的值,不然会异常
*/
List<Double> list = Arrays.asList(0D, 1D, 1.2, 5.6);
List<Integer> integers = Arrays.asList(0, 1, 2, 56);
Double avg = list.stream().collect(Collectors.averagingDouble(Double::doubleValue));
Double avgs = list.stream().mapToDouble(Double::doubleValue).average().orElse(0D);
Double intAvg = integers.stream().mapToInt(Integer::intValue).average().orElse(0D);
Double min = list.stream().min(Double::compareTo).get();
Double max = list.stream().max(Double::compareTo).get();
Double sum = list.stream().mapToDouble(Double::doubleValue).sum();
Double sums = list.stream().reduce(Double::sum).get();
3. 去重
//获取分类数组
List<String> categorys = list.stream().map(EpidemicDataConvergence::getCategory).distinct().collect(Collectors.toList());
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载