java Stream

package newfeature;

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

public class MyStream {
    public static void main(String[] args) {
        List<String> strings = Arrays.asList("abc", "", "dsf", "ghg", "abc");

        List<User> users = new ArrayList<>();
        users.add(new User(1, "a"));
        users.add(new User(1, "a"));
        users.add(new User(1, "a"));

        // 中间操作符返回的是stream
        // filter
        System.out.println(strings.stream()
                .filter(str -> str.contains("d"))
                .collect(Collectors.toList()));

        // distinct
        System.out.println(strings.stream()
                .distinct()
                .collect(Collectors.toList()));

        System.out.println(users.stream()
                .distinct()
                .collect(Collectors.toList()));

        // limit
        System.out.println(strings.stream()
                .limit(2)// 只取前两个
                .collect(Collectors.toList()));

        // skip
        System.out.println(strings.stream()
                .skip(2)// 去掉前两个
                .collect(Collectors.toList()));

        // map
        // 对流中所有元素做统一处理
        System.out.println(strings.stream()
                .map(str -> "haha" + str)
                .collect(Collectors.toList()));

        // flatmap
        // 字符串转为字符流
        System.out.println(strings.stream()
                .flatMap(str -> getCharacterByString(str))
                .collect(Collectors.toList()));

        // sorted
        System.out.println(strings.stream()
                .sorted()
                .collect(Collectors.toList()));


        // 终止操作符
        // anyMath
        System.out.println(strings.stream()
                .anyMatch(str->str.contains("a")));

        // allMatch
        System.out.println(strings.stream()
                .anyMatch(str->str.length()>0));

        // noneMatch
        System.out.println(strings.stream()
                .anyMatch(str->str.length()>100));

        // findAny
        System.out.println(strings.stream()
                .findAny());// 返回Option对象  Optional[abc]
        System.out.println(strings.stream()
                .findAny().get());

        // findFirst
        System.out.println(strings.stream()
                .findFirst());// 返回Option对象  Optional[abc]
        System.out.println(strings.stream()
                .findAny().get());

        // foreach
        strings.stream()
                .forEach(System.out::println);

        // collect
        System.out.println(strings.stream().collect(Collectors.toSet()));
        System.out.println(strings.stream().collect(Collectors.toList()));
        System.out.println(strings.stream()
                .collect(Collectors.toMap(v->v, v->v,(oldvalue, newvalue)->newvalue)));// key value 重复的处理方法

        // reduce
        // 将流中元素反复结合得到一个结果
        System.out.println(strings.stream()
                .reduce((acc, item)->{return acc + item;}));

        // count
        System.out.println(strings.stream()
                .count());

    }

    // 根据字符串获取字符
    public static Stream<Character> getCharacterByString(String str) {
        List<Character> characterList = new ArrayList<>();
        for (Character character : str.toCharArray()) {
            characterList.add(character);
        }
        return characterList.stream();
    }
}

class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
上一篇:strings.NewReader 与 bufio.NewReader


下一篇:一个倒计时显示的毫秒数(模仿拼多多)