Stream流中的常用方法

本文深入探讨Java Stream API的核心操作,包括forEach遍历、filter过滤、map映射、count计数、limit限制、skip跳过及concat连接等方法。通过实战案例,如处理集合元素、筛选特定条件的成员及合并流,展示Stream API的强大功能。

1._forEach
用来遍历流中的数据

public class Demo1ForEach {
    public static void main(String[] args) {
        //获取Stream流
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六");
        //使用Stream流中的forEach方法进行遍历
        stream.forEach((name) -> System.out.println(name));
    }
}

2._filer
在这里插入图片描述

public class Demo1Filter {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六", "张七");
        Stream<String> stream2 = stream.filter(name -> name.startsWith("张"));
        Stream2.forEach(name -> System.out.println(name));
    /*
    	Stream流属于管道流,只能被消费(使用)一次
    	第一个Stream流调用完毕后,数据会流转到下一个Stream上
    	而这时第一个stream流已经使用完毕,就会关闭
    	所以第一个Stream流就不能再调用方法了
    */
    }
}

3._map
在这里插入图片描述

/*
	若果需要将六中的元素映射到另一个流中,可以使用map方法
	<R> Stream<R> map(Function<? super T,? extends R> mapper);
	该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流
	Function中的抽象方法
		R apply(T t);
*/
public class Demo1Map {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("1", "2", "3", "4", "5");
        Stream<Integer> integerStream = stream.map(num -> Integer.parseInt(num));
        integerStream.forEach((integer)->{
            System.out.println(integer);
        });
    }
}

4._count
用于统计Stream流中元素的个数
long count();
count方法是一个终结方法,返回一个long类型的整数
所以不能再继续调用Stream流中的其他方法

public class Demo1Count {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六", "张七");
        Stream<String> stream1 = stream.filter((name) -> name.startsWith("张"));
        System.out.println(stream1.count());
    }
}

5._limit
在这里插入图片描述

public class Demo1Limit {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六", "张七");
        Stream<String> limitfor2 = stream.limit(2);
        limitfor2.forEach(name -> System.out.println(name));
    }
}

6._skip
skip用于跳过元素
如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流
Stream skip(long n)
若果流的当前长度大于n,则跳过前那个;否则将会得到一个长度为0的空流
在这里插入图片描述

public class Demo1skip {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六", "张七");
        Stream<String> stream1 = stream.skip(2);
        stream1.forEach(name -> System.out.println(name));
    }
}

7._concat
用于把流组合到一起
如果有两个流,希望合并成一个流,那么可以使用Stream接口的静态方法concat
static Stream concat(Stream<? extends T> a, Stream<? extends T> b)

public class DemoCancat {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六", "张七");
        Stream<String> stream1 = Stream.of("1", "2", "3", "4", "5");
        Stream<String> stream2 = Stream.concat(stream,stream1);
        stream2.forEach(name -> System.out.println(name));
    }
}

练习:集合元素处理
现有两个ArrayList集合储存队伍中的多个成员名字,第一个队伍只要名字为3个字的成员的前3个人,第二个队伍只要第二个字符为洋的不要钱2个人的名字,并把两个队伍合并成一个队伍,储存一个新的集合,根据姓名创建Person对象;醋纯到一个新集合,打印整个队伍的Person对象信息

public class Demo3Stream {
    public static void main(String[] args) {
        ArrayList<String> one = new ArrayList<>();
        one.add("张三三");
        one.add("李四");
        one.add("王五五");
        one.add("赵六六");
        one.add("田七七");
        Stream<String> oneStream = one.stream().filter(name -> name.length() == 3).limit(3);

        ArrayList<String> two = new ArrayList<>();
        two.add("喜洋洋");
        two.add("懒洋洋");
        two.add("美洋洋");
        two.add("灰太狼");
        two.add("红太狼");
        Stream<String> twoStream = two.stream().filter(name -> name.startsWith("洋", 1)).skip(2);

        Stream.concat(oneStream, twoStream).map((name) -> new Persion(name)).forEach(name -> System.out.println(name));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值