1/* 2 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24/** 25 * @test 26 * @bug 8003280 27 * @summary Add lambda tests 28 * Test lambda expressions for existing SAM interfaces like Runnable and Comparator<T> 29 * @compile LambdaTest1.java 30 * @run main LambdaTest1 31 */ 32 33import java.util.Collections; 34import java.util.List; 35import java.util.ArrayList; 36 37public class LambdaTest1 { 38 39 private static String assertionStr = ""; 40 41 private static void assertTrue(boolean b) { 42 if(!b) 43 throw new AssertionError(); 44 } 45 46 private static void test1(Runnable r) { 47 r.run(); 48 } 49 50 void test2(Object o) { 51 if(o instanceof Runnable) 52 ((Runnable)o).run(); 53 } 54 55 Runnable test3() { 56 return ()-> { assertionStr += "Runnable6"; }; 57 } 58 59 public static void main(String[] args) { 60 61 //lambda expressions for SAM interface Runnable: 62 //assign: 63 Runnable r = ()-> { assertionStr += "Runnable1 "; }; 64 r.run(); 65 66 //cast: 67 ((Runnable)()-> { assertionStr += "Runnable2 "; }).run(); 68 69 Object o = (Runnable)()-> {}; 70 71 o = (Runnable)()-> { 72 switch (assertionStr) { 73 case "Runnable1 Runnable2 ": 74 assertionStr += "Runnable3 "; 75 break; 76 default: 77 throw new AssertionError(); 78 } 79 return; 80 }; 81 82 //method parameter: 83 test1(()-> { assertionStr += "Runnable4 "; return; }); 84 85 LambdaTest1 test = new LambdaTest1(); 86 test.test2((Runnable)()-> { assertionStr += "Runnable5 "; }); 87 88 //return type: 89 r = test.test3(); 90 r.run(); 91 92 assertTrue(assertionStr.equals("Runnable1 Runnable2 Runnable4 Runnable5 Runnable6")); 93 94 //lambda expressions for SAM interface Comparator<T>: 95 List<Integer> list = new ArrayList<Integer>(); 96 list.add(4); 97 list.add(10); 98 list.add(-5); 99 list.add(100); 100 list.add(9); 101 Collections.sort(list, (Integer i1, Integer i2)-> i2 - i1); 102 String result = ""; 103 for(int i : list) 104 result += i + " "; 105 assertTrue(result.equals("100 10 9 4 -5 ")); 106 107 Collections.sort(list, 108 (i1, i2) -> { 109 String s1 = i1.toString(); 110 String s2 = i2.toString(); 111 return s1.length() - s2.length(); 112 }); 113 result = ""; 114 for(int i : list) 115 result += i + " "; 116 assertTrue(result.equals("9 4 10 -5 100 ")); 117 } 118} 119