lambda 、范型、匿名内部类结合例子

例子1.

LambdaTest.java

package LambdaTest;

import java.util.Arrays;
import java.util.List;

interface person {
	public abstract int eat(T aString, String bString);
}

public class LambdaTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String[] atp = { "Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer", "Roger Federer",
				"Andy Murray", "Tomas Berdych", "Juan Martin Del Potro" };
		List players = Arrays.asList(atp);

		// 以前的循环方式
		for (String player : players) {
			System.out.print(player + "; ");
		}

		// 使用 lambda 表达式以及函数操作(functional operation)
		players.forEach((player) -> System.out.print(player + "; "));

		// 在 Java 8 中使用双冒号操作符(double colon operator)
		players.forEach(System.out::println);
		
		int atmp;
		int btmp;
		//String aString;
		//String bString;
		
		person tmPerson =  (String aString, String bString) -> 1;
		System.out.println(tmPerson.eat("11", "11"));
       
		new LambdaTest().testLambda((String aString, String bString) -> 1);
		
		// 这里不用带 <参数> 类型就是因为,还是定义的时候,把 <参数> 或者 <范型> 规定好了!
		new LambdaTest().testLambda(( aString, bString) -> Integer.valueOf(bString) + 1);
	}

	public void testLambda(person person) {
		System.out.println("tetsLambda");
	}
}

例子2

LambdaTest2.java

package LambdaTest;

import java.util.Arrays;
import java.util.List;

interface person2 {
	public abstract void eat(T aString);
}

interface person3 {
	public abstract void eat(String aString, String bString);
}

public class LambdaTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String[] atp = { "Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer", "Roger Federer",
				"Andy Murray", "Tomas Berdych", "Juan Martin Del Potro" };
		List players = Arrays.asList(atp);

		// 以前的循环方式
		for (String player : players) {
			System.out.print(player + "; ");
		}

		// 使用 lambda 表达式以及函数操作(functional operation)
		players.forEach((player) -> System.out.print(player + "; "));

		// 在 Java 8 中使用双冒号操作符(double colon operator)
		players.forEach(System.out::println);
		
		int atmp;
		int btmp;
		//String aString;
		//String bString;
		
		// 返回值是 void !
		person2 tmPerson =  (String aString) -> System.out.println("ss");
		person2 tmPerson2 = (aString) -> System.out.println("ss");
		
		new LambdaTest2().testLambda((String a) -> System.out.println( a +"ss"));
		new LambdaTest2().testLambda(a -> System.out.println(a + "ss"));
		
		/** 这里的 String 是对象 !!!千万不要理解错!,把鼠标放上去就知道了!颜色都不一样!
		 * 而且 <对象> 首字母是 <小写>, 我这样写法是不规范的,还容易引起误导! */
		new LambdaTest2().testLambda(String -> System.out.println("ss"));
		
		new LambdaTest2().testLambda2((String a, String b) -> System.out.println(a + "ss"));
		new LambdaTest2().testLambda2((a, b) -> System.out.println(a + "ss"));
		
		/** 这里的 String 是对象 !!!千万不要理解错!,把鼠标放上去就知道了!颜色都不一样!
		 * 而且 <对象> 首字母是 <小写>, 我这样写法是不规范的,还容易引起误导! */
		new LambdaTest2().testLambda2((String, String2) -> System.out.println("ss"));
		
	}

	public void testLambda(person2 person) {
		System.out.println("tetsLambda222  person2");
	}
	
	public void testLambda2(person3 person) {
		System.out.println("tetsLambda333 person3");
	}
}

例子3

LambdaTest3.java

package LambdaTest;

import java.util.Arrays;
import java.util.List;

public class LambdaTest3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String[] atp = { "Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer", "Roger Federer",
				"Andy Murray", "Tomas Berdych", "Juan Martin Del Potro" };
		List players = Arrays.asList(atp);

		// 以前的循环方式
		for (String player : players) {
			System.out.print(player + "; ");
		}

		// 使用 lambda 表达式以及函数操作(functional operation)
		players.forEach((String player) -> System.out.print(player + "; "));

		// 在 Java 8 中使用双冒号操作符(double colon operator)
		players.forEach(System.out::println);
	
	}

}

 

你可能感兴趣的:(java)