java8 list切片_Java8中Stream的筛选,切片与映射的用法

创建Stream

中间操作

终止操作(终端操作)

@Test

public void test1(){

//创建Stream

//1.可以通过Collection系列集合提供的stream()获取串行流或parallelStream()获取并行流

List list = new ArrayList<>();

Stream stream1 = list.stream();

//2.通过Arrays中的静态方法stream()获取数组流

Employee[] emps = new Employee[10];

Stream stream2 = Arrays.stream(emps);

//3.通过Stream类中的静态方法of()

Stream stream3 = Stream.of("aa", "bb", "cc");

//4.创建无限流

//通过迭代创建无限流

Stream stream4 = Stream.iterate(0, (x) -> x + 2);

//中间操作和终止操作

stream4.limit(10).forEach(System.out::println);

//通过生成随机数创建无限流

Stream.generate(() -> Math.random())

.limit(5)

.forEach(System.out::println);

}

内部迭代与外部迭代

内部迭代:迭代操作由Stream API自己完成

外部迭代:由自己写的程序完成

//内部迭代:迭代操作由Stream API完成

@Test

public void test1(){

//中间操作:不会执行任何操作

Stream employeeStream = employees.stream()

.filter((e) -> {

System.out.println("Stream API的中间操作");

return e.getAge() > 35;

});

//终止操作:一次性执行全部内容,即"惰性求值"

employeeStream.forEach(System.out::println);

}

//外部迭代

@Test

public void test2(){

Iterator iterator = employees.iterator();

while (iterator.hasNext()){

System.out.println(iterator.next());

}

}

筛选与切片的用法

filter---接收Lambda,从流中排除某些元素

limit---截断流,使其元素不超过给定的数量

skip(n)---跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流,与limit(n)互补

distinct---筛选,通过流所生成元素的hashCode( )和equals( )去除重复元素

List employees = Arrays.asList(

new Employee("张三", 18 ,9999.99),

new Employee("李四", 38, 5555.99),

new Employee("王五", 50, 6666.66),

new Employee("赵六", 16, 3333.33),

new Employee("田七", 8, 7777.77),

new Employee("田七", 8, 7777.77),

new Employee("田七", 8, 7777.77)

);

@Test

public void test3(){

employees.stream()

.filter((e) -> {

System.out.println("短路");

return e.getSalary() > 5000;

})

.limit(2)

.forEach(System.out::println);

}

@Test

public void test4(){

employees.stream()

.filter((e) -> e.getSalary() > 5000)

.skip(2)

.forEach(System.out::println);

}

@Test

public void test5(){

employees.stream()

.filter((e) -> e.getSalary() > 5000)

.skip(2)

.distinct()

.forEach(System.out::println);

}

映射的用法

map---接收Lambda,将元素转换成其他形式或提取信息。接收一个函数作为参数,该参数会被应用到每个元素上,并将其映射成一个新的元素。

flatMap---接收一个函数作为参数,将流中的每个值换成另一个流,然后把所有流连接成一个流

public static Stream filterCharacter(String str){

List list = new ArrayList<>();

for (Character ch : str.toCharArray()){

list.add(ch);

}

return list.stream();

}

@Test

public void test6(){

List list = Arrays.asList("aaa", "bbb", "ccc", "ddd", "eee");

list.stream()

.map((str) -> str.toUpperCase())

.forEach(System.out::println);

System.out.println("----------------------------");

employees.stream()

.map(Employee::getName)

.forEach(System.out::println);

System.out.println("-----------------------------");

Stream> stream = list.stream()

.map(TestStreamAPI2::filterCharacter);//{{a, a, a}, {b, b, b}}

stream.forEach((sm) -> {

sm.forEach(System.out::println);

});

System.out.println("--------------------------------");

Stream sm = list.stream()

.flatMap(TestStreamAPI2::filterCharacter);//{a, a, a, b, b, b}

sm.forEach(System.out::println);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值