java Stream 流

一、获取

1、针对Collection

// Stream<E> stream = collection对象.stream();
// list是 collection对象, 是 ArrayList<Person>对象
Stream<Person> stream = list.stream();

2、针对数组

//Stream<E> stream =  Stream.of(... values); ...values,不定参数

Stream<String> stream1 = Stream.of("王也", "王爷", "金莲", "瓶儿", "好滋味");

二、常用方法

1、forEach遍历,注意是 终结方法, 使用完后Stream流不能用

package com.wt.lambda;

import java.util.function.Consumer;
import java.util.stream.Stream;

public class Demon01 {
    public static void main(String[] args) {
        Stream<String> stream1 = Stream.of("王也", "王爷", "金莲", "瓶儿", "好滋味");

        stream1.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                if (s.startsWith("王")){
                    System.out.println(s);
                }
            }
        });

        // Lambda 简写
        stream1.forEach( s -> {
                if (s.startsWith("王")){
                    System.out.println(s);
                }
            }
        );
    }
}

2、count方法,计算元素数列,也是终结方法,有返回值

package com.wt.lambda;

import java.util.stream.Stream;

public class Demon02 {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("王波", "西门", "东方", "南宫");
        long count = stream.count();
        System.out.println(count);
    }
}

3、filter 过滤,有返回值

package com.wt.lambda;

import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class Demon02 {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("王波", "西门", "东方", "南宫", "王一", "王大波");
       /* // 筛选
        stream.filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("王");
            }
            // 遍历
        }).forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });*/

        // Lambda
        stream.filter( s ->s.startsWith("王")).forEach( s -> System.out.println(s));
    }
}

4、limit(n), 获取前n个元素的Stream,有返回值

package com.wt.lambda;

import java.util.stream.Stream;

public class Demon03 {
    public static void main(String[] args) {
        Stream<Object> stream = Stream.of("王波", "西门", "东方", "南宫", "王一", "王大波");
        stream.limit(4).forEach(item-> System.out.println(item));
    }
}

5、skip(n),跳过n个元素的Stream,有返回值

package com.wt.lambda;

import java.util.stream.Stream;

public class Demon03 {
    public static void main(String[] args) {
        Stream<Object> stream = Stream.of("王波", "西门", "东方", "南宫", "王一", "王大波");
        stream.skip(3).forEach(s-> System.out.println(s));
    }
}

6、concat() ,两个Stream对象相加,有返回值

语法

Stream<Object> concat = Stream.concat(stream, stream1);

案例

package com.wt.lambda;

import java.util.stream.Stream;

public class Demon03 {
    public static void main(String[] args) {
        Stream<Object> stream = Stream.of("王波", "西门", "东方", "南宫", "王一", "王大波");
        Stream<String> stream1 = Stream.of("喜洋洋", "美羊羊", "懒洋洋");
        Stream<Object> concat = Stream.concat(stream, stream1);
        concat.forEach(s-> System.out.println(s));
    }
}

7、collect(), 将Stream流变成集合(collection),有返回值

package com.wt.lambda;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demon03 {
    public static void main(String[] args) {
        Stream<Object> stream = Stream.of("王波", "西门", "东方", "南宫", "王一", "王大波");
        List<Object> list = stream.collect(Collectors.toList());
        System.out.println(list);
    }
}

8、distinct, 去重(依据hashCode和equals),有返回值

案例一

package com.wt.lambda;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demon03 {
    public static void main(String[] args) {
        Stream<Object> stream = Stream.of("王波", "西门", "东方", "南宫", "王一", "王大波","西门");
        stream.distinct().forEach(s-> System.out.println(s));
    }
}

案例二

package com.wt.lambda;

import java.util.ArrayList;
import java.util.Collections;


public class Demon03 {
    public static void main(String[] args) {
        ArrayList<Person> people = new ArrayList<>();
        Collections.addAll(people, new Person("小心", 10), new Person("小葵", 2), new Person("小心", 10), new Person("小文", 14));
        // collection对象变成 Stream
        people.stream().distinct().forEach(person -> System.out.println(person));
    }
}

9、map() ,转换流中的数据类型,有返回值

package com.wt.lambda;

import java.util.function.Function;
import java.util.stream.Stream;

public class Demon04 {
    public static void main(String[] args) {
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
        /*integerStream.map(new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) {
                return integer+"";
            }
        }).forEach(s-> System.out.println(s));*/

        // Lambda
        integerStream.map(integer -> integer+"").forEach(s-> System.out.println(s));

    }
}

 

posted @ 2025-04-20 22:08  市丸银  阅读(10)  评论(0)    收藏  举报