欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java8新特性stream流示例

程序员文章站 2022-04-28 21:26:52
...

一、简介
java.util.stream表示能应用在一组元素上一次执行的操作序列。stream操作分为中间操作和最终操作,最终操作返回一特定类型的计算结果,而中间操作返回stream本身,这样就可以将多个操作串起来。stream操作需要指定一个数据源,比如java.util.collection的子类、list或者set,map类型不支持。stream可以串行stream()执行或者并行parallelStream()执行。
java8新特性stream流示例
二、Stream
java8新特性stream流示例
java8新特性stream流示例
java8新特性stream流示例
三、示例
1、foreach循环

    @Test
    public void Foreach(){
        //你不鸟我,我也不鸟你
        List<String> list = Arrays.asList("you","don't","bird","me",",",
                "i","don't","bird","you");

        //方式一:jdk1.8之前的循环遍历方式
        for(String item:list){
            System.out.println(item);
        }

        //方式二:使用stream流
        // void forEach(Consumer<? super T> action)
        list.stream().forEach(item -> System.out.println(item));

        //方式三:使用stream流+lambda表达式
        list.stream().forEach(System.out::println);
    }

2、filter过滤

    public class User{
        private long id;
        private String name;
        private Integer age;

        public User(){}

        public User(long id, String name, Integer age){
            this.id = id;
            this.name = name;
            this.age = age;
        }

        public Integer getAge(){
            return this.age;
        }
    }

    @Test
    public void filter(){
        List<User> users = Arrays.asList(
                new User(1, "wanwei", 23),
                new User(2, "zhangsan", 25),
                new User(3, "lisi", 29)
        );
        users.stream().filter(user -> user.getAge()>24).forEach(user -> System.out.println(user.name));
    }

3、map映射

    @Test
    public void map(){
        List<String> list = Arrays.asList("djfh", "sdf", "sdfg");
        list.stream().map(item -> item.toUpperCase()).forEach(System.out::println);
    }

4、flatmap

    @Test
    public void flatmap(){
        List<Integer> a = Arrays.asList(1,2,3);
        List<Integer> b = Arrays.asList(4,5,6);

        List<List<Integer>> collect = Stream.of(a,b).collect(Collectors.toList());
        System.out.println(collect);

        //将多个集合中的元素合并为一个集合
        List<Integer> mergelist = Stream.of(a,b).flatMap(list -> list.stream()).collect(Collectors.toList());
        System.out.println(mergelist);

        //通过Builder方式来构建
        Stream<Object> stream = Stream.builder().add("hello").add("hi").add("HI").build();
        stream.forEach(System.out::println);
    }

5、sorted排序

    @Test
    public void sorted(){
        List<String> list = Arrays.asList("c","b","e","a");
        list.stream().sorted((s1,s2) -> s1.compareTo(s2)).forEach(System.out::println);
    }

6、distinct去重

    @Test
    public void distinct(){
        Stream<String> stream = Stream.of("hello","hello","hi","hi","i");
        stream.distinct().forEach(System.out::println);
    }

7、count总数量

    @Test
    public void count(){
        Stream<String> stream = Stream.of("known","is","known","nok","is","nok");
        long count = stream.count();
        System.out.println(count);
    }

8、skip、limit

@Test
public void skip(){
    List<String> list = Arrays.asList("a", "b", "c", "d", "e");
    // Stream<T> skip(long n)
    list.stream().skip(2).forEach(System.out::println);  // c、d、e
}

@Test
public void limit(){
    List<String> list = Arrays.asList("a", "b", "c", "d", "e");
    list.stream().skip(2).limit(2).forEach(System.out::println);    // c、d
}

9、concat

@Test
public void concat(){
    List<String> list = Arrays.asList("a", "b");
    List<String> list2 = Arrays.asList("c", "d");
    Stream<String> concatStream = Stream.concat(list.stream(), list2.stream());
    concatStream.forEach(System.out::println);
}

10、anyMatch、allMatch

@Test
public void match(){
    // 你给我站住
    List<String> list = Arrays.asList("you", "give", "me", "stop");
    // boolean anyMatch(Predicate<? super T> predicate);
    // parallelStream可以并行计算,速度比stream更快
    boolean result = list.parallelStream().anyMatch(item -> item.equals("me"));
    System.out.println(result);
}

11、reduce归纳

@Test
public void reduce(){
    Stream<String> stream = Stream.of("you", "give", "me", "stop");
    // Optional<T> reduce(BinaryOperator<T> accumulator);
    Optional<String> optional = stream.reduce((before, after) -> before + "," + after);
    optional.ifPresent(System.out::println);    // you,give,me,stop
}

public static void main(String[] args) {
    List<BigDecimal> list = Arrays.asList(
            new BigDecimal("11.11"),
            new BigDecimal("22.22"),
            new BigDecimal("33.33")
    );
    // 66.66
    BigDecimal sum = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
    System.out.println(sum);
}

12、findFirst、findAny

    @Test
    public void findFirst(){
        Stream<String> stream = Stream.of("you", "give", "me", "stop");
        String value = stream.findFirst().get();
        System.out.println(value);
    }

    @Test
    public void findAny(){
        Stream<String> stream = Stream.of("you", "give", "me", "stop");
        String value2 = stream.findAny().get();
        System.out.println(value2);
    }
相关标签: java