Stream流式处理&&Lambda表达式

执键写春秋
• 阅读 1335

高度抽象的集合数据处理

Stream流式处理&&Lambda表达式

1. 使用Stream流对List进行去重、去偶数,然后查找最大值

import java.util.Arrays;
import java.util.Comparator;

public class Stream1 {
    public static void main(String[] args) {
        int max = Arrays.asList(1,2,2,5,6,8,9)
                .stream()
                //去重
                .distinct()
                //去偶
                .filter(n -> n%2 != 0)
                //取最大
                .max(Comparator.comparing(n -> n))
                .get();
        System.out.println(max);
    }
}

2. 使用Stream流对List进行排序,然后取第一个值

import java.util.Arrays;
import java.util.Comparator;

public class Stream2 {
    public static void main(String[] args) {
        int first = Arrays.asList(1,2,2,5,6,8,9)
                .stream()
                //排序-升序
                .sorted(Comparator.comparing(n -> n))
                //取第一
                .findFirst()
                .get();
        System.out.println(first);

        int first_reversed = Arrays.asList(1,2,2,5,6,8,9)
                .stream()
                //排序-降序
                .sorted(Comparator.comparing(n -> n,Comparator.reverseOrder()))
                .findFirst()
                .get();
        System.out.println(first_reversed);

    }
}

3. 使用Stream流对List进行求平均值、求和

import java.util.Arrays;

public class Stream3 {
    public static void main(String[] args) {
        //求平均值
        double average = Arrays.asList(1,2,2,5,6,8,9)
                .stream()
                //对流中的元素执行一对一的转换
                .mapToInt(n->n)
                //返回流中所有元素的平均值
                .average()
                .getAsDouble();
        System.out.println(average);

        //求和
        int sum = Arrays.asList(1,2,2,5,6,8,9)
                .stream()
                .mapToInt(n->n)
                .sum();
        System.out.println(sum);
    }
}

4. 使用Stream流对List进行排序,按照age从大到小排序

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class Stream4 {
    static class Person{
        int age;
        String name;

        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    }


    static List<Person> list = Arrays.asList(
            new Person(30,"王五"),
            new Person(33,"张三"),
            new Person(27,"李四")
            );
    public static void main(String[] args) {
        System.out.println("排序前:"+list);
        List<Person> personList = list
                .stream()
                .sorted(Comparator.comparing(n->n.getAge()))
                .collect(Collectors.toList());
        System.out.println("排序后:"+personList);
    }
}
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Wesley13 Wesley13
2年前
java8 stream 集合去重
/Description:JDK1.8的Stream操作工具类@authorlinan.du@date2019年7月18日@version1.0/publicclassStreamUtil{/
Wesley13 Wesley13
2年前
Java8系列之Stream总结
流的简介  官方解释,Stream是Java8的一大亮点,它与java.io包里的InputStream和OutputStream是完全不同的概念。它也不同于StAX对XML的解析的Stream,也不是AmazonKinesis对大数据实时处理的Stream。它是对集合对象功能的增强,她专注于对集合对象进行各种非常便利、高效的聚合操作(ag
Wesley13 Wesley13
2年前
Java8 新特性之流式数据处理
一.流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现:List<Inte
Wesley13 Wesley13
2年前
Java学习:Stream流式思想
Stream流Java8API添加了一种新的机制——Stream(流)。Stream和IO流不是一回事。流式思想:像生产流水线一样,一个操作接一个操作。使用Stream流的步骤:数据源→转换成流→操作1→操作2→……数据源(source):可以是集合、数组等。St
Wesley13 Wesley13
2年前
Java 8新特性之Stream 概念
Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI(java.util.stream.\)。Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行
Wesley13 Wesley13
2年前
Java8 新特性之集合操作Stream
Java8新特性之集合操作StreamStream简介Java8引入了全新的StreamAPI。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。
Stella981 Stella981
2年前
List stream 对象 属性去重
单值去重不写了,记录对象去重随手一个对象:@Data@AllArgsConstructorpublicclassMilk{privateIntegerkey;privateStringvalue;}操作:packagecom.yus.util;
Wesley13 Wesley13
2年前
Java8的lambda表达式和Stream API
一直在用JDK8,却从未用过Stream,为了对数组或集合进行一些排序、过滤或数据处理,只会写for循环或者foreach,这就是我曾经的一个写照。刚开始写写是打基础,但写的多了,各种乏味,非过来人不能感同身受。今天,我就要分享一篇如何解决上述问题的新方法StreamAPI。但学习Stream之前却不得不学一下Lambda表达式。说实话,网上介
京东云开发者 京东云开发者
7个月前
Stream流处理快速上手最佳实践 | 京东物流技术团队
一引言JAVA1.8得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工处理。Stream可以看作是流水线上的一个工序。在