jdk1.8的理解
之前線上的jdk1.7的雌桑,登錄許久終于等到1.8的新項(xiàng)目喇喉, 終于可以用lambda表達(dá)式啦哈哈哈哈~~~
-
匿名類(lèi)
對(duì)于一些接口,我們可以采用使用 new的方式創(chuàng)建
# 這個(gè)不是匿名類(lèi)
Runnable runnable = new Runnable(){
public void run(){
System.out.prinln("this is a new Thread");
}
}
new Thread(runnable).start();
# 這個(gè)就是匿名類(lèi)校坑。拣技。 沒(méi)有名類(lèi)名的類(lèi)
new Thread(
new Runnable(){
public void run(){
System.out.prinln("this is a new Thread");
}
}
).start();
lambda表達(dá)式
我的理解就是 lambda就是針對(duì)于 匿名類(lèi)來(lái)的。耍目。
比如上面的 Runnable 接口定義如下: 可以簡(jiǎn)單理解就是 一個(gè)接口里面就一個(gè)方法过咬, 這種接口叫做 《函數(shù)式接口》, 這個(gè)方法的 入?yún)⑹鞘裁矗ㄟ@里是無(wú)參) 返回是什么類(lèi)型(這是是void)
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
對(duì)于沒(méi)有入?yún)⒅仆瑳](méi)有返回值的 接口函數(shù) lambda如下:
() - >{log.info("this is test")} #
對(duì)于 lambda的理解, 這就是一個(gè) 匿名類(lèi)的實(shí)現(xiàn)泵三。 就和 new Runnable(){} 一樣耕捞。 不過(guò)就是 lambda表達(dá)式里面是否需要參數(shù)衔掸,和返回值是否需要, 需要靠 接口 里面的 那個(gè)方法決定俺抽。
-
Consumer
源碼如下:
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
這時(shí)候 你創(chuàng)建lambda表達(dá)式的時(shí)候 就需要 有一個(gè)參數(shù)啦敞映。。
Consumer<Integer> c = (a)->{System.out.println(a);}
# 調(diào)用
c.accept(1);
// 輸出 1
-
Predicate
源碼如下:
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
這時(shí)候 你創(chuàng)建lambda表達(dá)式的時(shí)候 就需要 有一個(gè)參數(shù)啦磷斧。振愿。
Predicate<Integer> p = (a)->{return a>10;}
//或者
Predicate<Integer> p1 = (a)-> a>10
# 調(diào)用
p.test(23);
// 輸出 true
-
Supplier
這個(gè)東西呢,廢話不多說(shuō)弛饭,先看源碼
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
lambda是 什么入?yún)⒍紱](méi)有冕末,但是返回一個(gè)對(duì)象
Supplier<User> s = ()->new User();
//這樣就搞定啦。侣颂。