自学内容网 自学内容网

学Java第四十二天--------Arrays工具类和Lambda表达式

一、Arrays工具类

前四个会有返回值,不会改变原数组,后面三个是操作,会改变数组。

1、tostring(arr)

2、binarySearch(arr,e)

3、copyof(arr,个数)

4、fill(arr,new e)

5、sort()只有一个参数,默认升序

6、sort()有两个参数的,能确定排序规则的

原理解释:



如何查看一个方法的参数是什么类型的?-------两个参数都填充,对 sort 进行 CTRL+B查看源码,发现sort的第二个参数是接口类型:::

写第二个参数的时候,直接写new compare,下拉框会直接显示,选中就可以了

代码:

package com.Arraysutils;

import java.util.Arrays;
import java.util.Comparator;

public class sort_test {
    public static void main(String[] args) {
        Integer[]arr={1,8,7,2,54,96,20};

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//正序    o2-o1是降序
            }
        });

        
        System.out.println(Arrays.toString(arr));
        

    }
}
package com.Arraysutils;

import java.awt.print.Printable;
import java.util.Arrays;
import java.util.Comparator;

public class sort_test {
    public static void main(String[] args) {
        Integer[]arr={1,8,7,2,54,96,20};

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//正序    o2-o1是降序
            }
        });


        System.out.println(Arrays.toString(arr));


        System.out.println("----------------------");
        System.out.println(Arrays.toString(arr));


        System.out.println(Arrays.binarySearch(arr,3));

        System.out.println(Arrays.toString(Arrays.copyOf(arr,5)));
        Arrays.fill(arr,200);
        System.out.println(Arrays.toString(arr));

    }
}

二、Lambda表达式

例子:

Lambda表达式是函数式思想的体现:

Lambda的固定格式:

用法:

代码:

原本的匿名内部类:

package com;

public class Lambda_test {
    public static void main(String[] args) {

        method(new Swim() {
            @Override
            public void swimming() {
                System.out.println("我在游泳");
            }
        });
    }

    public static void method(Swim s){
        s.swimming();
    }


    public interface Swim{
        public abstract void swimming();


    }
}

用Lambda表达式简化后:

package com;

public class Lambda_test {
    public static void main(String[] args) {

        method(()-> {
                System.out.println("我在游泳");
            }
        );
    }

    public static void method(Swim s){
        s.swimming();
    }

@FunctionalInterface
    public interface Swim{
        public abstract void swimming();


    }
}

1)必须得是匿名内部类,

2)而且得是实现接口的,不能是继承类的,

3)实现的接口里面只能有一个函数。如何判断?在接口上面放@FunctionalInterface,不报错,就可以变成Lambda表达式。

总结:

还可以更加省略:

代码:

package com.sort;

import java.util.Arrays;
import java.util.Comparator;

public class Lambda_test2 {
    public static void main(String[] args) {
        Integer []arr={4,5,8,3,2,7,1};

        Arrays.sort(arr, ( o1,  o2)->
                o1-o2

        );

        System.out.println(Arrays.toString(arr));
    }
}

小练习:

代码:

package com.Lambda;

import java.util.Arrays;
import java.util.Comparator;

public class Lambda_test3 {
    public static void main(String[] args) {
        String []arr={"aaa","a","aa","aaaa"};

        Arrays.sort(arr, (o1, o2)->
                        o1.length()-o2.length()
        );

        System.out.println(Arrays.toString(arr));
    }
}


原文地址:https://blog.csdn.net/weixin_67566799/article/details/154495226

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!