1.
Java 8 , default ,
//Formula
public interface Formula {
//
double calculate(int a);
//
default double sqrt(int a){
return Math.sqrt(a);
}
}
main:
Formula f = new Formula() {
@Override
public double calculate(int a) {
return a+1;
}
};
System.out.println(f.calculate(4));
System.out.println(f.sqrt(8));
: ,
.
2.Lambda
2.1 Lambda
:
public class LambdaTest1 {
public static void main(String[] args) {
// list
List list = Arrays.asList
("hello","tom","apple","bbc");
//
Collections.sort(list, new Comparator(){
@Override
public int compare(String o1, String o2) {
return -o1.compareTo(o2);
}
});
// Lambda
Collections.sort(list,(String s1,String s2)->{
return s1.compareTo(s2);
});
//
//1.
//2.
Collections.sort(list,(s1,s2)->s1.compareTo(s2));
System.out.println(list);
}
}
2.2 Functional
“ ” , lambda 。 , 。
lambda , , @FunctionalInterface , 。
:
public class LambdaTest2 {
public static void main(String[] args) {
LambdaTest2 t = new LambdaTest2();
//
// Action1 a1 = ()->System.out.println("hello");
t.test1(()->System.out.println("hello"));
//Action2 a2 = (f)->" :"+f;
// ,
Action2 a2 = f->" :"+f;
t.test2(a2);
}
public void test1(Action1 a){
a.run();
}
public void test2(Action2 a){
System.out.println(a.run(3));
}
}
// ,
@FunctionalInterface
interface Action1{
public void run();
}
// ,
@FunctionalInterface
interface Action2{
public T run(F f);
}
:lambda
2.3
Java 8 :: ( )
:
public class LambdaTest3 {
public static void main(String[] args) {
LambdaTest3 t = new LambdaTest3();
// Lambda
// Integer toBinaryString :
//Action3
// Integer toBinaryString 、
Action3 a3 = Integer::toBinaryString;
System.out.println(a3.run(4));
// Lambda
// t test
Action3 aa3 = t::test;
System.out.println(aa3.run(4));
}
public String test(int i){
return "i="+i;
}
}
@FunctionalInterface
interface Action3{
public String run(int Integer);
}
: ::
public class LambdaTest6 {
public static void main(String[] args) {
Model m = new Model();
// , ,
Action a1 = (s)->System.out.println("hello");
a1.run(m);
// : Model Model
// Model :
// run Model m
Action a2 = Model::test3;
a2.run(m);
// m test2
// test2 Action
Action a3 = m::test2;
a3.run(m);
}
}
interface Action{
public void run(T t);
}
class Model{
public void test1(){
System.out.println("test1");
}
public void test2(Model a){
System.out.println("test2");
}
public int test3(){
System.out.println("test3");
return 1;
}
}
Java 8 ::
public class LambdaTest4 {
public static void main(String[] args) {
//Lambda
//
Action4Creater creater = Action4::new;
Action4 a4 = creater.create("zhangsan");
a4.say();
}
}
class Action4{
private String name;
public Action4() {
}
public Action4(String name) {
this.name = name;
}
public void say(){
System.out.println("name = "+name);
}
}
interface Action4Creater{
public Action4 create(String name);
}
2.4 lambda
public class LambdaTest5 {
private static int j;
private int k;
public static void main(String[] args) {
LambdaTest5 t = new LambdaTest5();
t.test();
}
public void test(){
int num = 10;
j = 20;
k = 30;
//lambda
Action5 a5 = (i)->System.out.println(" :i="+(i+num+j+k));
a5.run(1);
// final
//num = 60;
j = 50;
k = 70;
}
}
interface Action5{
public void run(int i);
}
2.5 Predicate lambda
java.util.function.Predicate java , lamb API 。
public class LambdaTest6 {
public static void main(String[] args) {
List languages = Arrays.asList("Java", "html5","JavaScript", "C++", "hibernate", "PHP");
// J
filter(languages,(name)->name.startsWith("J"));
//5
filter(languages,(name)->name.endsWith("5"));
//
filter(languages,(name)->true);
//
filter(languages,(name)->false);
// 4
filter(languages,(name)->name.length()>4);
System.out.println("-----------------------");
// J 4
Predicate c1 = (name)->name.startsWith("J");
Predicate c2 = (name)->name.length()>4;
filter(languages,c1.and(c2));
// J
Predicate c3 = (name)->name.startsWith("J");
filter(languages,c3.negate());
// J 4
Predicate c4 = (name)->name.startsWith("J");
Predicate c5 = (name)->name.length()<4;
filter(languages,c4.or(c5));
// Java
filter(languages,Predicate.isEqual("Java"));
//
boolean test = Predicate.isEqual("hello").test("world");
System.out.println(test);
}
public static void filter(List languages, Predicate condition) {
for(String name: languages) {
if(condition.test(name)) {
System.out.println(name + " ");
}
}
}
}
2.6 Function
Function ,
compose
andThen
:compose andThen ,
default Function andThen(Function super R,? extends V> after) apply after apply 。
default Function compose(Function super V,? extends T> before) before apply apply 。
static Function identity() apply() 。
public interface Function {
R apply(T t);
default Function compose(Function super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
default Function andThen(Function super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
// : t->t (t)->t
//t->t identity , Function
// :Function