java 8 语法_Java8新特性,语法学习

package com.example.demo.java8;

import com.example.demo.domin.User;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.stream.Collectors;

import java.util.stream.IntStream;

/**

* @program: demo

* @description: java8新语法学习1

* @author: guoxu

* @create: 2019-12-11 16:16

*/

public class LearnFor {

/**

stream()优点

无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。

为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。

惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。

可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

stream().map()方法的使用示例:

*/

public static void main(String[] args) {

/**

* 新旧for循环

*/

for (int i = 0; i < 4; i++) {

System.out.println("旧for循环输出"+i); //旧for循环输出0 旧for循环输出1 旧for循环输出2 旧for循环输出3

}

IntStream.range(0, 4).forEach(i -> System.out.println(i+"...")); //0... 1... 2... 3...

// 逆向迭代

for(int i = 5; i > 0; i--) {}

//将一个拉姆表达式传递给 iterate 方法,该方法对给定值进行递减,以便沿着相反方向直行迭代。

//我们使用 limit 函数指定我们希望在迭代周期直行的次数。

IntStream.iterate(5, e -> e-1).limit(5);

/**

* 给定一个集合,仅选择长度为 4 的名称,然后通过逗号将他们连接起来。

*/

List names = Arrays.asList("Jack", "Jill", "Nate", "Kara", "Kim", "Jullie", "Paul", "Peter");

String collect = names.stream()

.filter(name -> name.length() == 4)

.collect(Collectors.joining(","));

System.out.println("用逗号连接的字符串:"+collect); //用逗号连接的字符串:Jack,Jill,Nate,Kara,Paul

List subList = names.stream()

.filter(name -> name.length() == 4)

.collect(Collectors.toList());

System.out.println(subList); //[Jack, Jill, Nate, Kara, Paul]

//计算在 numbers 列表中大于 3 且 小于 8 的偶数并且将该数字乘以 2,然后输出结果。

List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

System.out.println(

numbers.stream()

.filter(e -> e > 3)

.filter(e -> e < 8)

.filter(e -> e % 2 == 0)

.mapToInt(e -> e * 2)

.sum()

);//20

//姓名集合中以J开始且长度大于3的字符串,转换为全大写,然后用逗号连接

System.out.println(

names.stream()

.filter(name -> name.startsWith("J"))

.filter(name -> name.length() > 3)

.map(String::toUpperCase)

.collect(Collectors.joining(","))

);//JACK,JILL,JULLIE

//取出对象集合中每一个对象的对应字段加入集合中

List users = new ArrayList<>();

IntStream.range(0, 4).forEach(i -> {

users.add(

User.builder()

.name(i+"q")

.email(i+"qq.com")

.phone(i+"999")

.build()

);

});

List userNames = users.stream()

.map(User::getName)

.collect(Collectors.toList());

System.out.println(userNames); //[0q, 1q, 2q, 3q]

//数组字母小写变大写

List list= Arrays.asList("a", "b", "c", "d");

List upper =list.stream()

.map(String::toUpperCase)

.collect(Collectors.toList());

System.out.println(upper); //[A, B, C, D]

//数组所有元素,按某种规律计算:

List num = Arrays.asList(1,2,3,4,5);

List collect1 = num.stream()

.map(n -> n * 2)

.collect(Collectors.toList());

System.out.println(collect1); //[2, 4, 6, 8, 10]

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值