栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8-函数式编程(lambda、Stream、Optional)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8-函数式编程(lambda、Stream、Optional)

package jdknew;

import java.time.Instant;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class JDKnewTest {
    public static void main(String[] args) {
        // java8新特性
        // 接口 默认方法 静态方法
        // 新的日期API
        LocalDateTime.now();
        Instant.now();
        // 泛型注解
        // 集合延迟分配内存 hashMap红黑树

        // lambda表达式 函数式接口实例
        // 简写 单抽象方法接口匿名实现类对象
//        test((a,s) -> {
//            System.out.println(s);
//            return a;
//        });
//        // 单语句 省略return
//        test((a,s) -> a+1);
//        FunctionI t = (a,s) -> a;

        // 四大函数式接口
        // void x
        Consumer consumer = o -> System.out.println(o);
        Consumer consumer1 = consumer.andThen(o -> System.out.println("then:"+o));
        consumer1.accept("test");
        // x void
//        Supplier
        // R T
//        Function
        // boolean T
//        Predicate

        // 方法引用和构造器引用
        // lambda体有相关实现
        // 类::静态方法
        // 对象::实例方法
        // 第一个参数类::实例方法
        test(new MethodRef() {
            @Override
            public String toString1() {
                return "hello".toString();
            }
        });
        test("hello"::toString);
        test(new MethodRef() {
            @Override
            public String toString1() {
                return JDKnewTest.toSS();
            }
        });
        test(JDKnewTest::toSS);
        test(String::equals);
        // 构造器引用
        MethodRef m = String::new;

        // stream API
        // 集合运算
        Stream stream = new ArrayList().stream();
        Stream stream1 = Arrays.stream(new Integer[10]);
        Stream integerStream = Stream.of(1, 2, 3);
            // 生成流
        Stream limit = Stream.iterate(0, t -> t + 1).limit(10);
        Stream.generate(Math::random).limit(10);
        // 操作
        // 过滤
        stream.filter(x -> x!=null);
        // 截断
        stream.limit(10);
        stream.skip(3);
        // 去重
        stream.distinct();
        // 映射
        stream.map(x -> x);
        // 将元素映射的流合并
        Stream stream2 = stream.flatMap(x -> Stream.of(1,2,3));
        // 排序
        stream.sorted();
        // 终止操作
        // 全部符合
        boolean b = stream.allMatch(x -> x != null);
        // 全不符合
        stream.noneMatch(x -> x==null);
        stream.findFirst();
        stream.findAny();
        stream.count();
//        stream.max();
//        stream.min();
//        stream.forEach();
        // 汇总
        Arrays.stream(new Integer[10]).reduce(0, Integer::sum);
        // 收集数据
        stream.collect(Collectors.toList());

        // Optional 避免空指针
        Optional o = Optional.of(new Object());
        Optional.empty();
        Optional.ofNullable(null);
        // 如果为空返回新对象 如果非空返回原对象
        Object oo = o.orElse(new Object());
    }
    public static void test(FunctionI t){}
    public static void test(MethodRef t){
        System.out.println(t.toString1());
    }
    public static void test(MethodRef1 t){
        System.out.println( t.eq("123","123") );
    }
    public static String toSS(){
        return "toSS";
    }
}
interface FunctionI{
    int dosome(int a,String s);
}
interface MethodRef{
    String toString1();
}
interface MethodRef1{
    boolean eq(String s1,String s2);
}
 

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号