Arrays工具类与Lambda表达式

1.Arrays工具类:

Arrays类是java.util包的操作数组的工具类,提供了大量用于操作数组的静态方法。

转字符串方法

  • toString(Object[] a):返回数组内容的字符串表示。

搜索方法

  • binarySearch(Object[] a, Object key):在已排序的数组中搜索指定对象,使用二分查找法。

填充方法

  • fill(Object[] a, Object val):用指定值填充整个数组。

比较方法

  • equals(Object[] a, Object[] a2):比较两个数组是否相等。

复制方法

  • copyOf(Object[] original, int newLength):复制数组到新数组,并可以指定新数组的长度。

排序方法

  • sort(Object[] a):对指定对象数组进行升序排序。
  • sort(Object[] a, Comparator<? super T> c):根据自定义的排序规则对数组进行排序。
    • 只能给引用数据类型数组排序
    • Comparator是一个(函数式)接口,需要传递实现这个接口的对象作为规则,想到匿名内部类。
    • 底层是插入+二分
    • 排序规则返回值简单记忆为:
      • o1-o2:升序排序
      • o2-o1:降序排序

示例:

public static void main(String[] args) {
        int[] arr1={7,5,2,1,9,8,3,6,4};
        Arrays.sort(arr1);
        System.out.println(Arrays.toString(arr1));
        //sout:[1, 2, 3, 4, 5, 6, 7, 8, 9]

        Integer[] arr2={7,5,2,1,9,8,3,6,4};
        Arrays.sort(arr2, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(arr2));
        //sout:[9, 8, 7, 6, 5, 4, 3, 2, 1]
    }

2.Lambda表达式

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

标准格式:

( 方法的形参 )->{ 方法体 }

  • 可以用来简化匿名内部类的书写
  • 只能简化函数式接口()的匿名内部类
    • 有且只有一个抽象方法的接口叫做函数式接口 :注解@FunctionalInterface
      • 可以有其他的默认方法和静态方法

以上文sort为例,可以简化为:

        Integer[] arr1={7,5,2,1,9,8,3,6,4};
        Arrays.sort(arr1,(Integer o1,Integer o2) ->{return o2-o1;});
        System.out.println(Arrays.toString(arr1));
        //sout:[9, 8, 7, 6, 5, 4, 3, 2, 1]

省略规则:

  • 参数类型可以省略不写
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式的方法体只有一行,大括号、分号、return可以省略,但需要同时不写

如上文sort,可以再次简化为:

        Integer[] arr1={7,5,2,1,9,8,3,6,4};
        Arrays.sort(arr1,(o1, o2) -> o2-o1);
        System.out.println(Arrays.toString(arr1));
        //sout:[9, 8, 7, 6, 5, 4, 3, 2, 1]



另外,阅读Comparator源码,发现发现有int compare(T o1, T o2);和boolean equals(Object obj);两个抽象函数,但注解/编译器并没有报错,这是因为equals 方法继承自Object 父类,不会影响 Comparator 是否符合函数式接口的条件。根据函数式接口的定义,只有用户自己定义的抽象方法才会被计算在内。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇