华杉研发九学习日记20 LinkedHashMap TreeMap Arrays 函数式接口 方法引用

华杉研发九学习日记20

一,LinkedHashMap

与HashMap相比,key是有序的

Map<Integer,String> map = new LinkedHashMap<Integer,String>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
System.out.println(map);

二,TreeMap实现类

TreeMap是key有序的键值对容器,即它会对key进行排序,和TreeSet类似,它底层也用到了树形结构。

排序方式:

  • 自然排序 Comparable
  • 比较器排序 Comparator
//		有自然排序
//        Map<Integer, String> map = new TreeMap<Integer, String>();
//	比较器排序
//        Map<Integer, String> map = new TreeMap<>(new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2-o1;
//            }
//        });
//		比较器排序的lambda表达式
        Map<Integer, String> map = new TreeMap<>((o1,o2)->o2-o1);
        map.put(1111,"李素");
        map.put(2,"wang");
        map.put(322,"张三");
        map.put(42,"天气");
        System.out.println(map);

三,Arrays类

针对于数组的工具包

String str[]={"李四","王五","张三"};
List<String> list = Arrays.asList(str);
System.out.println(list);

Integer sc[]={12,45,10,23,100,-10};
System.out.println(Arrays.toString(sc));
//  升序      --快速排序功能
Arrays.sort(sc);
System.out.println(Arrays.toString(sc));
//  二分查找
System.out.println(Arrays.binarySearch(sc,12));
//  降序      --  自定义排序实现
Arrays.sort(sc,(a,b)->b-a);
System.out.println(Arrays.toString(sc));

四,函数式接口

JDK8新特性

4.1 lambda(箭头函数)

lambda在JDK 1.7之前是没有的,因为lambda表达式的方式和java中的语法有很大的不同。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用Lambda表达式可以使代码变的更加简洁紧凑。
lambda表达式只能用于简化函数式接口对应的匿名内部类
lambda表达式由3部分组成: lambda形参列表,箭头以及lambda方法体.

条件:
接口必须是函数式接口(该接口中的抽象方法只能有且仅有一个)

注意:

1.如果方法体只有一行,则可以省略花括号
2.如果方法中有参数列表,则参数中的数据类型可以省略不写3.如果方法中的参数有且仅有一个参数,则可以省略小括号
4.如果方法中有返回值,且返回值有且仅有一条语句,则可以把大括号和return一起省略

4.2 java内置的函数式接口

在这里插入图片描述

//  消费型接口
Consumer<String> con = s -> System.out.println(s);
con.accept("你好你好");
//  生产型接口
Supplier<Integer> s1 = ()->new Random().nextInt(100)+1;
System.out.println(s1.get());
//  函数型接口
Function<String, Integer> f1 = s->s.length()    ;
Integer len = f1.apply("abc");
System.out.println(len);
//  断言型接口
Predicate<Integer> pre = (a)->{
    if(a%2==0)
        return true;
    else return false;
};
System.out.println(pre.test(11));
//  了解中的了解
System.out.println(pre.test(11));
UnaryOperator<Integer> uo = (a)->a*10;
System.out.println(uo.apply(3));
BiFunction<Integer, Integer, Integer> bi = (a,b)->a+b;
System.out.println(bi.apply(3,4));

五,方法引用

方法引用是特定情况下lambda表达式的简化写法.当外界已经有与函数式接口里抽象方法匹配的方法的时候,可以使用方法引用.

方法引用本质上是lambda表达式.

lambda的本质是函数式接口的匿名实现类对象!方法引用的!

本质也是函数式接口的匿名实现类对象!

//  打印语句
Consumer<String> con1 = new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
};
con1.accept("Hello");
//  lambda表达式
Consumer<String> con2 = (s)-> System.out.println(s);
con2.accept("World");
//  方法的引用
Consumer<String> con3 = System.out::println;
con3.accept("小孤鸡");
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孤鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值