java8 list Lambda 表达式

wylc123 1年前 ⋅ 1004 阅读

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源点

相关文章推荐

全部评论: 0

    我有话说: