01.JAVA8新特性

JAVA8新特性

1)接口中默认方法修饰为普通方法

2)lambda表达式(重点)

        ()参数列表

        ->分隔  

         {}方法体

3)函数式接口

4)方法与构造函数引用(重点)    

        静态方法引入:类名称::方法名称    

        对象方法引入:类名称::实例方法名称    

        实例方法引入:new对象 对象实例::方法引入    

        构造函数引入:类名::new

5)Stream接口(重点) 6)Optional

链接:https://pan.baidu.com/s/1s1207a7edyrTyjCUuLZ4yA 
提取码:aosh

1.接口中默认方法修饰为普通方法

/**
 * JDK8新特性--接口中默认方法修饰为普通方法
 */
public interface JDK8Interface {
    /**
     * 抽象方法 需要子类实现
     * 默认类型:public、abstract
     */
    void add();

    /**
     * default方法
     */
    default void defaultGet() {
        System.out.println("我是default方法");
    }

    /**
     * 静态方法
     */
    static void staticGet() {
        System.out.println("我是static方法");
    }
}

public class JDK8InterfaceImpl implements JDK8Interface {

    /**
     * 默认的情况下必须重写接口中抽象方法 默认和静态方法是不需要必须重写
     */
    @Override
    public void add() {
        System.out.println("add");
    }
}
public class Test01 {

    public static void main(String[] args) {
        JDK8InterfaceImpl jdk8Interface = new JDK8InterfaceImpl();
        jdk8Interface.add();
        JDK8Interface.staticGet();
        jdk8Interface.defaultGet();
    }
}

2.lambda表达式

1)使用lambda表达式调用无函数

@FunctionalInterface
public interface WuCanInterface {

    void get();
}
import com.demo.service.WuCanInterface;

/**
 * 使用lambda表达式调用无函数
 */
public class Test01 {

    public static void main(String[] args) {
        ((WuCanInterface)() -> System.out.println("使用lamdba表达式调用方法")).get();
    }
}

2)使用lambda表达式调用有参函数

@FunctionalInterface
public interface YouCanInterface {

    String get(int i, int j);
}
import com.demo.service.YouCanInterface;

/**
 * 使用lambda表达式调用有参函数
 */
public class Test02 {

    public static void main(String[] args) {
        String result = ((YouCanInterface)(i, j) -> i + "--" + j).get(1, 2);
        System.out.println(result);
    }
}

3)使用lambda表达式集合遍历

import java.util.ArrayList;

/**
 * 使用lambda表达式集合遍历
 */
public class Test03 {

    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("1");
        strings.add("2");
        strings.add("3");
        strings.forEach(s -> System.out.println(s));
    }
}

4)使用lambda表达式集合排序

import com.demo.entity.UserEntity;

import java.util.ArrayList;
import java.util.Comparator;

/**
 * 使用lambda表达式集合排序
 */
public class Test04 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userLists = new ArrayList<>();
        userLists.add(new UserEntity("c", 12));
        userLists.add(new UserEntity("b", 6));
        userLists.add(new UserEntity("a", 23));

        //排序1
        userLists.sort((o1, o2) -> o1.getAge() - o2.getAge());
        userLists.forEach((t) -> System.out.println(t.toString()));

        //排序2
        userLists.sort(Comparator.comparing(UserEntity::getUserName));
        userLists.forEach((t) -> System.out.println(t.toString()));
    }
}

5)使用lambda表达式实现线程调用

/**
 * 使用lambda表达式实现线程调用
 */
public class Test05 {

    public static void main(String[] args) {
        new Thread(() -> System.out.println("我是子线程")).start();
        new Thread(() -> System.out.println("获取到线程名称:" + Thread.currentThread().getName() + ",子线程")).start();
    }
}

3.Stream接口

1)使用stream将list集合转换为set集合并去重

public class UserEntity {

    private String userName;

    private int age;

    public UserEntity() {

    }

    public UserEntity(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }

    public String getUserName() {
        return userName;
    }

    public int getAge() {
        return age;
    }

    /**
     * 重写toString方法
     */
    @Override
    public String toString() {
        return "UserEntity{" + "userName='" + userName + '\'' + ", age=" + age + '}';
    }

    /**
     * 重写hashCode方法
     * 重写equals方法必须重写hashCode方法
     */
    public int hashCode() {
        return userName.hashCode();
    }

    /**
     * 重写equals方法
     */
    public boolean equals(Object obj) {
        if (obj instanceof UserEntity) {
            return userName.equals(((UserEntity)obj).userName) && age == (((UserEntity)obj).age);
        } else {
            return false;
        }
    }
}
import com.demo.entity.UserEntity;

import java.util.ArrayList;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 使用stream将list集合转换为set集合并去重
 */
public class Test01 {

    /**
     * 获取串行流  .stream()
     * 获取并向流  .parallelStream()
     */
    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));

        //重写equals方法 比较值
        userEntities.add(new UserEntity("d", 16));
        userEntities.add(new UserEntity("d", 16));

        //获取stream流
        Stream<UserEntity> stream = userEntities.stream();
        //转换成set集合  set集合不允许有重复数据
        Set<UserEntity> setUserList = stream.collect(Collectors.toSet());
        //打印集合
        setUserList.forEach(userEntity -> System.out.println(userEntity.toString()));
    }
}

2)使用stream将list集合转换为map集合

import com.demo.entity.UserEntity;

import java.util.ArrayList;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 使用stream将list集合转换为map集合
 */
public class Test02 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));

        Stream<UserEntity> stream = userEntities.stream();
        Map<String, UserEntity> collect = stream.collect(Collectors.toMap(userEntity -> userEntity.getUserName(), userEntity -> userEntity));
        collect.forEach((o, o2) -> System.out.println(o + "," + o2));
    }
}

3)使用stream求和

import com.demo.entity.UserEntity;

import java.util.ArrayList;
import java.util.Optional;
import java.util.stream.Stream;

/**
 * 使用stream求和
 */
public class Test03 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 1));
        userEntities.add(new UserEntity("b", 2));
        userEntities.add(new UserEntity("c", 3));
        userEntities.add(new UserEntity("d", 4));
        userEntities.add(new UserEntity("e", 5));
        userEntities.add(new UserEntity("f", 6));
        userEntities.add(new UserEntity("g", 7));
        Stream<UserEntity> stream = userEntities.stream();
        Optional<UserEntity> sum = stream.reduce((user1, user2) -> {
            UserEntity userEntity = new UserEntity("sum", user1.getAge() + user2.getAge());
            return userEntity;
        });
        System.out.println(sum.get().getAge());
    }
}

4)使用stream求最小值

import com.demo.entity.UserEntity;

import java.util.ArrayList;
import java.util.Optional;

/**
 * 使用stream求最小值
 */
public class Test04 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));
        userEntities.add(new UserEntity("d", 21));
        userEntities.add(new UserEntity("e", 19));
        userEntities.add(new UserEntity("f", 1));
        userEntities.add(new UserEntity("g", 21));

        Optional<UserEntity> max = userEntities.stream().min((o1, o2) -> o1.getAge() - o2.getAge());
        System.out.println(max.get());
    }
}

5)使用stream查询是否有匹配数据

import com.demo.entity.UserEntity;

import java.util.ArrayList;

/**
 * 使用stream查询是否有匹配数据
 */
public class Test05 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));
        userEntities.add(new UserEntity("d", 21));
        userEntities.add(new UserEntity("e", 19));
        userEntities.add(new UserEntity("f", 19));
        userEntities.add(new UserEntity("g", 21));
        boolean b = userEntities.stream().anyMatch(userEntity -> "a".equals(userEntity.getUserName()));
        System.out.println(b);
    }
}

6)使用stream filter过滤

import com.demo.entity.UserEntity;

import java.util.ArrayList;

/**
 * 使用stream filter过滤
 */
public class Test06 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));
        userEntities.add(new UserEntity("d", 21));
        userEntities.add(new UserEntity("e", 19));
        userEntities.add(new UserEntity("f", 19));
        userEntities.add(new UserEntity("g", 21));
        userEntities.add(new UserEntity("h", 12));

        userEntities.stream().filter(userEntity -> "a".equals(userEntity.getUserName()) && userEntity.getAge() > 18)
            .forEach((userEntity -> System.out.println(userEntity)));
    }
}

7)使用stream limit分页

import com.demo.entity.UserEntity;

import java.util.ArrayList;

/**
 * 使用stream limit分页
 */
public class Test07 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));
        userEntities.add(new UserEntity("d", 21));
        userEntities.add(new UserEntity("e", 19));
        userEntities.add(new UserEntity("f", 19));
        userEntities.add(new UserEntity("g", 21));

        // 从第2+1个开始 取3个
        userEntities.stream().skip(2).limit(3).forEach((userEntity -> System.out.println(userEntity)));
    }
}

8)使用stream sorted排序

import com.demo.entity.UserEntity;

import java.util.ArrayList;

/**
 * 使用stream sorted排序
 */
public class Test08 {

    public static void main(String[] args) {
        ArrayList<UserEntity> userEntities = new ArrayList<>();
        userEntities.add(new UserEntity("a", 20));
        userEntities.add(new UserEntity("b", 28));
        userEntities.add(new UserEntity("c", 35));
        userEntities.add(new UserEntity("d", 21));
        userEntities.add(new UserEntity("e", 19));
        userEntities.stream().sorted((o1, o2) -> o2.getAge() - o1.getAge()).forEach((userEntity -> System.out.println(userEntity.toString())));
    }
}

4.方法与构造函数引用

1)静态方法引入

@FunctionalInterface
public interface MessageInterface {

    void get(Integer a,Integer b);
}
import com.demo.service.MessageInterface;

/**
 * 静态方法引入:类名称::方法名称
 * 强制:引入方法的参数和返回类型 要和 函数接口的参数和返回类型 保持一致
 */
public class Test01 {

    public static void main(String[] args) {
        MessageInterface messageInterface3 = Test01::staticGet;
        messageInterface3.get(10, 20);
    }

    public static void staticGet(Integer a, Integer b) {
        System.out.println("staticGet,a:" + a + ",b:" + b);
    }
}

2)实例方法引入

@FunctionalInterface
public interface MessageInterface2 {

    String getMessage();
}
import com.demo.service.MessageInterface2;

/**
 * 实例方法引入:new对象 对象实例::方法引入
 */
public class Test02 {

    public static void main(String[] args) {
        MessageInterface2 messageInterface = new Test02()::objGet;
        System.out.println(messageInterface.getMessage());
    }

    public String objGet() {
        return "test";
    }
}

3)构造函数引入

public class MessageEntity {

    private String messageId;
    private String messageName;

    public MessageEntity() {

    }

    @Override
    public String toString() {
        return "MessageEntity{" + "messageId='" + messageId + '\'' + ", messageName='" + messageName + '\'' + '}';
    }
}
import com.demo.entity.MessageEntity;

@FunctionalInterface
public interface MessageInterface3 {

    MessageEntity getMessage();
}
import com.demo.entity.MessageEntity;
import com.demo.service.MessageInterface3;

/**
 * 构造函数引入:类名::new
 */
public class Test03 {

    public static void main(String[] args) {
        MessageInterface3 messageInterface3 = MessageEntity::new;
        System.out.println(messageInterface3.getMessage());
    }
}

4)对象方法引入

import com.demo.method.Test04;

public interface MkService {

    String get(Test04 Test04);
}
import com.demo.service.MkService;

/**
 * 对象方法引入:类名称::实例方法名称
 */
public class Test04 {

    public static void main(String[] args) {
        MkService mkService = Test04::get;
        System.out.println(mkService.get(new Test04()));
    }

    public String get() {
        return "TEST";
    }

}

5)方法引入:获取字符串长度

import java.util.function.Function;

/**
 * 方法引入:获取字符串长度
 */
public class Test05 {

    public static void main(String[] args) {
        Function<String, Integer> function = String::length;
        System.out.println(function.apply("test"));
    }
}

5.Optional方法

1)Optional方法 判断对象是否为空

import java.util.Optional;

/**
 * Optional方法 判断对象是否为空
 */
public class Test01 {

    /**
     * Optional.ofNullable 可以允许传递一个空值对象
     * Optional.of 不允许传递一个空值对象
     */
    public static void main(String[] args) {
        String userName = null;

        //1.ofNullable 可以允许传递一个空值对象
        Optional<String> optional = Optional.ofNullable(userName);
        //不为空返回true,为空返回false
        System.out.println(optional.isPresent());
        //获取值
        System.out.println(optional.get());

        //2.of 不允许传递一个空值对象
        Optional<String> optional1 = Optional.of(userName);

        //3.orElse 如果为空设置默认值
        String uName = Optional.ofNullable(userName).orElse("aa");
        System.out.println(uName);
    }
}

2)Optional方法 过滤空值

import java.util.Optional;

/**
 * Optional方法 过滤空值
 */
public class Test02 {

    public static void main(String[] args) {
        String userName = "11";
        Optional<String> optional = Optional.ofNullable(userName);
        optional.ifPresent(System.out::println);
    }
}

3)Optional方法 案例1

public class OrderEntity {

    private String orderId;
    private String orderName;
    private String orderDes;

    public OrderEntity(String orderId, String orderName) {
        this.orderId = orderId;
        this.orderName = orderName;
    }

    public String getOrderId() {
        return orderId;
    }

    public String getOrderName() {
        return orderName;
    }

    public String getOrderDes() {
        return orderDes;
    }
}
import com.demo.entity.OrderEntity;

import java.util.Optional;

/**
 * Optional方法 案例1
 * orElseGet()---写函数的接口的形式 赋默认值
 * orElse()----直接传递默认值
 */
public class Test03 {

    private static OrderEntity orderEntity;

    public static void main(String[] args) {
        System.out.println(Test03.getOrder());
        System.out.println(Test03.getOrder());
    }

    public static OrderEntity getOrder() {
        return Optional.ofNullable(orderEntity).orElseGet(Test03::orElseGet);
    }

    private static OrderEntity createOrder() {
        return new OrderEntity("123456", "aa");
    }

    public static OrderEntity orElseGet() {
        orderEntity = createOrder();
        return orderEntity;
    }
}

4)Optional方法 案例2:将字符串全部转换为小写

import com.demo.entity.OrderEntity;

import java.util.Optional;

/**
 * Optional方法 案例2:将字符串全部转换为小写
 */
public class Test04 {

    public static void main(String[] args) {
        String orderName = Test04.getOrderName();
        System.out.println(orderName);
    }

    public static String getOrderName() {
        OrderEntity order = new OrderEntity("123456", "XiangQian");
        return Optional.ofNullable(order).map(orderEntity -> orderEntity.getOrderName())
            .map(orderName -> orderName.toLowerCase()).orElse(null);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值