编程语言
首页 > 编程语言> > 【Java8 新特性 1,美的Java面试题

【Java8 新特性 1,美的Java面试题

作者:互联网

//无参数,无返回值

public static void test2() {

    //“->”左边只有一个小括号,表示无参数,右边是Lambda体(就相当于实现了匿名内部类里面的方法了,(即就是一个可用的接口实现类了。))

    Runnable runnable = ()->System.out.println("Lambda 表达式方式,线程启动");

    runnable.run();

}



//有一个参数,并且无返回值

public static void test3() {

    //这个e就代表所实现的接口的方法的参数,

    Consumer<String> consumer = e->System.out.println("Lambda 表达式方式,"+e);

    consumer.accept("传入参数");

}



//有两个以上的参数,有返回值,并且 Lambda 体中有多条语句

public static void test4() {

    //Lambda 体中有多条语句,记得要用大括号括起来

    Comparator<Integer> com = (x, y) -> {

        System.out.println("函数式接口");

        return Integer.compare(x, y);

    };

    int compare = com.compare(100, 244);

    System.out.println("有两个以上的参数,有返回值,"+compare);

}



//若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写

public static void test5() {

    //Comparator com = (x, y) -> Integer.compare(100, 244);

    System.out.println("若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写,"+Integer.compare(100, 244));

}

}




2、控制台输出 

--------



![](https://www.icode9.com/i/ll/?i=2020062813002681.jpg?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70)



二、Java8四大内置函数式接口

================



如果使用lambda还要自己写一个接口的话太麻烦,所以Java自己提供了一些接口:



1、Consumer 消费性接口:void accept(T t);

----------------------------------



//有一个参数,并且无返回值

public static void test3() {

//这个e就代表所实现的接口的方法的参数,

Consumer<String> consumer = e->System.out.println("Lambda 表达式方式,"+e);

consumer.accept("传入参数");

}




2、Supplier供给型接口: T get();

-------------------------



package javase.Lambda;

import java.util.ArrayList;

import java.util.function.Supplier;

public class Test2 {

public static void main(String[] args) {

    ArrayList<Integer> res = getNumList(10,()->(int)(Math.random()*100));

    System.out.println(res);

}



public static ArrayList<Integer> getNumList(int num, Supplier<Integer> sup){

    ArrayList<Integer> list = new ArrayList<>();

    for (int i = 0; i < num; i++) {

        Integer e = sup.get();

        list.add(e);

    }

    return list;

}

}




![](https://www.icode9.com/i/ll/?i=20200628130146699.jpg)



3、Function 函数式接口:R apply(T t);

------------------------------



package javase.Lambda;

import java.util.function.Function;

public class Test2 {

public static void main(String[] args) {

    String newStr = strHandler("abc",(str)->str.toUpperCase());

    System.out.println(newStr);

    newStr = strHandler("  abc  ",(str)->str.trim());

    System.out.println(newStr);

}



public static String strHandler(String str, Function<String,String>fun){

    return fun.apply(str);

}

}




![](https://www.icode9.com/i/ll/?i=20200628130220755.jpg)



4、Predicate 断言式接口:boolean test(T t);

------------------------------------



判断一些字符串数组判断长度`>2`的字符串:



package javase.Lambda;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.function.Predicate;

public class Test2 {

public static void main(String[] args) {

    List<String> list = Arrays.asList("hello","jiangshuying","lambda","www","ok","q");

    List<String> ret = filterStr(list,(str)->str.length()>2);

    System.out.println(ret);

}



public static List<String> filterStr(List<String> list, Predicate<String> pre){

    ArrayList<String> arrayList = new ArrayList<>();

    for(String str:list){

        if(pre.test(str)) {

            arrayList.add(str);

        }

    }

    return arrayList;

}

}




![](https://www.icode9.com/i/ll/?i=2020062813025870.jpg)



三、方法引用与构造器引用

============



要求:实现抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!



方法引用:使用操作符“::”将类与方法分隔开来。



> 对象::实例方法名  

> 类::静态方法名  

> 类::实例方法名



举个例子:



public static void test9(){

Comparator<Integer> comparator = (x,y)->Integer.compare(x,y);

Comparator<Integer> comparator1 = Integer::compare;

int compare = comparator.compare(1,2);

int compare1 = comparator1.compare(1,2);

System.out.println("compare:"+compare);

System.out.println("compare1:"+compare1);

}




* * *



![](https://www.icode9.com/i/ll/?i=20200628130402632.jpg)



四、lambda表达式的一些常见用法

==================



1、使用lambda表达式对集合进行迭代

--------------------



package javase.Lambda;

import java.util.Arrays;

import java.util.List;

public class Test3 {

public static void main(String[] args) {

    List<String> list = Arrays.asList("java","c#","javascript");

    //before java8

    for (String str:list){

        System.out.println("before java8,"+str);

    }

    //after java8

    list.forEach(x-> System.out.println("after java8,"+x));

}

}




![](https://www.icode9.com/i/ll/?i=20200628130434562.jpg?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70)



2、用lambda表达式实现map

-----------------



map函数可以说是函数式编程里最重要的一个方法了。map的作用是将一个对象变换为另外一个。在我们的例子中,就是通过map方法将cost增加了0,05倍的大小然后输出。



package javase.Lambda;

import java.util.Arrays;

import java.util.List;

public class Test3 {

public static void main(String[] args) {

    List<Double> list = Arrays.asList(10.0,20.0,30.0);

    list.stream().map(x->x+x*0.05).forEach(x-> System.out.println(x));

}

}




![](https://www.icode9.com/i/ll/?i=20200628130506340.jpg)



3、用lambda表达式实现map与reduce

------------------------



既然提到了map,又怎能不提到reduce。reduce与map一样,也是函数式编程里最重要的几个方法之一。。。map的作用是将一个对象变为另外一个,而reduce实现的则是将所有值合并为一个,请看:



package javase.Lambda;

import java.util.Arrays;

import java.util.List;

public class Test3 {

public static void main(String[] args) {

    //before java8

    List<Double> cost = Arrays.asList(10.0, 20.0,30.0);

    double sum = 0;

    for(double each:cost) {

        each += each * 0.05;

        sum += each;

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

List cost = Arrays.asList(10.0, 20.0,30.0);

    double sum = 0;

    for(double each:cost) {

        each += each * 0.05;

        sum += each;

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

[外链图片转存中…(img-XE2UHspc-1630662906026)]

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

标签:面试题,Java,Redis,美的,System,static,println,public,out
来源: https://blog.csdn.net/m0_60388419/article/details/120087340