集合之Stream操作集合

来源:互联网 发布:js绑定事件on方法 编辑:程序博客网 时间:2024/04/29 12:07
public class IntStreamTest {    public static void main(String[] args) {        IntStream is = IntStream.builder()        .add(20)        .add(13)        .add(-2)        .add(18)        .build();        //下面调用聚集方法的代码每次只能执行一行//      System.out.println("is所有元素的最大值:" + is.max().getAsInt());//      System.out.println("is所有元素的最小值:" + is.min().getAsInt());//      System.out.println("is所有元素的总和:" + is.sum());//      System.out.println("is所有元素的总数:" + is.count());//      System.out.println("is所有元素的平均值:" + is.average());//      System.out.println("is所有元素的平方是否都大于20:"            + is.allMatch(ele -> ele * ele > 20));//      System.out.println("is是否包含任何元素的平方大于20:"             + is.anyMatch(ele -> ele * ele >20));        //将is映射成一个新Stream,新Stream的每个元素是原Stream元素的2倍+1        IntStream newIs = is.map(ele -> ele * 2 + 1);        //使用方法引用的方式来遍历集合元素        newIs.forEach(System.out::println);    }}

中间方法:中间操作允许流保持打开状态,并允许直接调用后续方法。上面的map()方法就是中间方法,中间方法的返回值是另外一个流
末端方法:末端方法是对流的最终操作。当对某个Stream执行末端方法后,该流会被“消耗”且不再可用。上面的sum(),count(),average()等方法都是末端方法。

import java.util.Collection;import java.util.HashSet;import java.util.stream.IntStream;public class IntStreamTest {    public static void main(String[] args) {        Collection<String> books = new HashSet();        books.add(new String("轻量级Java EE企业应用实战"));        books.add(new String("疯狂Java讲义"));        books.add(new String("疯狂ios讲义"));        books.add(new String("疯狂Ajax讲义"));        books.add(new String("疯狂Android讲义"));        //使用Lambda表达式(目标类型是Predicate)过滤集合//      books.removeIf(ele -> ele.length() < 10);//      System.out.println(books);        //统计书名包含“疯狂”子串的图书数量,filter(Predicate predicate):过滤Stream中所有不符合predicate的元素        System.out.println(books.stream().filter(ele -> ele.contains("疯狂"))                .count());        //统计书名包含“Java”子串的图书数量        System.out.println(books.stream().filter(ele -> ele.contains("Java"))                .count());        //统计书名字符串长度大于10的图书数量        System.out.println(books.stream().filter(ele -> ele.length() > 10)                .count());        //先调用Collection对象的stream()方法将集合转换为Stream        //再调用Stream的mapToInt()方法获取原有的Stream对应的IntStream        books.stream().mapToInt(ele -> ele.length())        //调用forEach()方法遍历IntStream中每个元素            .forEach(System.out::println);    }}

程序只要调用Collection的stream()方法即可返回该集合对应的Stream,接下来就可通过Stream提供的方法对所有集合元素进行处理。
mapToInt:对流中的元素执行一对一的转换,该方法返回的新流中包含了转换生成的所有元素

原创粉丝点击