// 如下例所示,简化了对集合的操作 Integer[] intArray = new Integer[]{2,3,4,5,6,7}; // 创建Stream流对象 Stream<Integer> intStream = Stream.of(intArray); intStream.distinct()//去重(中间操作) .filter(ele -> ele > 4)//过滤(中间操作) .forEach(ele -> System.out.println(ele));(终结操作)
List<Integer> integerList = new ArrayList<>(); Stream<Integer> stream = integerList.stream();
类型二: 数组:Arrays.stream(数组)或者使用Stream.of来创建
Integer[] intArray = new Integer[]{2,3,4,5,6,7}; Stream<Integer> intStream = Stream.of(intArray); intStream = Arrays.stream(intArray);
类型三:双列集合:转换成单列集合后创建
Map<String,Object> map = new HashMap<>(); Stream<Map.Entry<String,Object>> mapStream = map.entrySet().stream();
List<Person> integerList = new ArrayList<>(); integerList.add(new Person("xiaoming", 2)); Stream<Person> stream = integerList.stream(); stream.distinct() // 流,在这里的时候还是Person对象 .map(new Function<Person, String>() { // 经过map方法之后,转化为name了 @Override public String apply(Person person){ return person.name; } }).forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); // lambda格式 Stream<Person> stream = integerList.stream(); // 经过map方法之后,转化为name了 stream.distinct() // 流,在这里的时候还是Person对象 .map(person -> person.name) .forEach(s -> System.out.println(s));
List<Person> integerList = new ArrayList<>(); integerList.add(new Person("xiaoming", 2)); Stream<Person> stream = integerList.stream(); stream.sorted(((o1, o2) -> o1.age - o2.age)) .forEach(s -> System.out.println(s));
// 如下,统计Person list里面所有的book数量 List<Person> integerList = new ArrayList<>(); integerList.add(new Person("xiaoming", 2)); Stream<Person> stream = integerList.stream(); stream.flatMap(new Function<Person, Stream<?>>() { @Override public Stream<?> apply(Person person) { return person.books.stream(); } }) .forEach(s -> System.out.println(s)); // lambda格式 stream.flatMap((Function<Person, Stream<?>>) person -> person.books.stream()) .forEach(s -> System.out.println(s));
// 展示collect的使用方式 List<Person> integerList = new ArrayList<>(); integerList.add(new Person("xiaoming", 2)); Stream<Person> stream = integerList.stream(); //List<Person> list = stream.collect(Collectors.toList()); //Set<Person> set = stream.collect(Collectors.toSet()); Map<String,Object> map = stream.collect(Collectors.toMap(person -> person.name, person -> person.books));
List<Person> integerList = new ArrayList<>(); integerList.add(new Person("xiaoming", 2)); Stream<Person> stream = integerList.stream(); stream.findFirst() .ifPresent(person -> System.out.println(person.name));
reduce( ) // 归并,reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和在初始化值的基础上进行计算,计算结果再和后面的元素计算。
List<Person> integerList = new ArrayList<>(); integerList.add(new Person("xiaoming", 2)); Stream<Person> stream = integerList.stream(); // 统计所有person的年龄 Integer sum = stream.map(person -> person.age) .reduce(0, new BinaryOperator<Integer>() { @Override public Integer apply(Integer result, Integer element) { return result + element; } }); // lambda // 统计所有person的年龄 Integer sum = stream.map(person -> person.age) .reduce(0, (result, element) -> result + element);
**此处补充一张Idea Debug Stream流的方法