Lambda Demos

From CSE231 Wiki
Jump to: navigation, search

Motivation

JDK 8 added lambdas to alleviate the bulkiness of anonymous inner classes. We use lambdas heavily in 231.

Background

Lambda Expressions

Code To Investigate

async,finish

		launchApp(() -> {
			System.out.println("start");

			finish(() -> {
				async(() -> {
					sleepRandom(1_000);
					System.out.println("-apples");
				});
				async(() -> {
					sleepRandom(1_000);
					System.out.println("--oranges");
				});
				async(() -> {
					sleepRandom(1_000);
					System.out.println("---bananas");
				});
				async(() -> {
					sleepRandom(1_000);
					System.out.println("----mangoes");
				});
			});

			System.out.println("stop");
		});
class: LambdasAsyncAndFinishExample.java DEMO: Java.png
methods: main
package: lambda.demo.asyncfinish
source folder: src/main/java
class: AnonymousInnerClassesAsyncAndFinishExample.java DEMO: Java.png
methods: main
package: lambda.demo.asyncfinish
source folder: src/main/java
class: NamedClassesAsyncAndFinishExample.java DEMO: Java.png
methods: main
package: lambda.demo.asyncfinish
source folder: src/main/java

compute

		String text = "abracadabra";
		// NOTE: we use a TreeMap<K,V> since it is sorted producing consistent output
		Map<Character, Integer> mapCharacterToCount = new TreeMap<>();
		for( char ch : text.toCharArray() ) {
			// https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#compute-K-java.util.function.BiFunction-
			mapCharacterToCount.compute(ch, (Character character, Integer count)-> {
				if( count != null ) {
					//we have associated character before
					return count+1;
				} else {
					//first encounter with character
					return 1;
				}
			});
		}
		for( Entry<Character, Integer> entry : mapCharacterToCount.entrySet() ) {
			System.out.println(entry);
		}
class: LambdasMapComputeExample.java DEMO: Java.png
methods: main
package: lambda.demo.compute
source folder: src/main/java
class: AnonymousInnerClassesMapComputeExample.java DEMO: Java.png
methods: main
package: lambda.demo.compute
source folder: src/main/java
class: NamedClassesMapComputeExample.java DEMO: Java.png
methods: main
package: lambda.demo.compute
source folder: src/main/java

user interface

LambdaViz.png

buttonI.setOnAction((ActionEvent e) -> {
	System.out.println("entering lambda");
	System.out.println("    " + accessible_within_lambda_i + "            (note: runtime stack with local variable i long since popped)");
	System.out.println(" leaving lambda");
	System.out.println();
});
class: FxLambdaDemoApp.java VIZ
package: lambda.demo.viz
source folder: src/visualization/java