package lambda;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.stream.Stream;
public final class Lambda {
private Lambda() {
}
static class Person implements Named, EchoName {
private String name;
Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return String.format("My name is %s", this.name);
}
@Override
public String echoName() {
return Named.super.echoName(); // éåäºå¿
é¡»è¦æå¨æå®å®ç°
}
}
static interface Named {
default String echoName() { // é»è®¤æ¹æ³çå®ç°
return "SamChi";
}
}
static interface EchoName {
default String echoName() {
return "James";
}
}
public static void main(String[] args) {
List strList =
Arrays.asList("Sam", "Jack", "Peter", "Tom", "Lucy", "Anders", "James", "Lily");
System.out.println("before sort:" + strList);
strList.sort((str1, str2) -> Integer.compare(str1.length(), str2.length())); // æ ¹æ®æ³åæ¥èªå¨æ¨å¯¼
System.out.println("after sort:" + strList);
strList.forEach(str -> System.out.println(String.format("= %s =", str))); // å¯ç±»åæ¨å¯¼çåä¸ªåæ°æ éå å°æ¬å·
strList.forEach((final String str) -> System.out.println(String.format("= %s =", str))); // å¯ä»¥å final修饰符
// java.util.functionå
ä¸ç彿°å¼æ¥å£
BiFunction comparator =
(str1, str2) -> Integer.compare(str1.length(), str2.length());
System.out.println(comparator instanceof Object);
System.out.println(comparator.getClass().getCanonicalName());
Object obj = comparator;
System.out.println(obj.getClass().getCanonicalName());
// obj = (String str1, String str2) -> Integer.compare(str1.length(), str2.length()); è¿æ ·å¼ç¨å°±ä¸å¯ä»¥äºã
Runnable sleeper = () -> {
System.out.println("Zzzzzz");
try {
TimeUnit.SECONDS.sleep(1L);
} catch (InterruptedException e) {
e.printStackTrace(); // å¨Lambda表达å¼ä¸æè·å¼å¸¸
}
};
Thread t = new Thread(sleeper);
t.start();
strList.forEach(str -> System.out.println(str));
strList.forEach(System.out::println);
strList.sort(String::compareToIgnoreCase);
Stream personsStream = strList.stream().map(Person::new);
personsStream.forEach(System.out::println);
int a = 0, b = 1;
new Thread(() -> {
System.out.println("a is :" + a);
System.out.println("b is :" + b);
// a++; ä¸å¯ä»¥æ¹åå¤å´ä½ç¨åçå¼
// int a = 3; ä¸å¯ä»¥è¦çå®ä¹å¤å´ä½ç¨åçå¼
}).start();
Person p = new Person("Jack");
System.out.println(">>>>>" + p.getName());
}
}