Difference between revisions of "Lambda Demos"

From CSE231 Wiki
Jump to navigation Jump to search
Line 39: Line 39:
  
 
==compute==
 
==compute==
  <nowiki> String text = "abracadabra";
+
  <nowiki>String text = "abracadabra";
// NOTE: we use a TreeMap<K,V> since it is sorted producing consistent output
+
// NOTE: we use a TreeMap<K,V> since it is sorted producing consistent output
Map<Character, Integer> mapCharacterToCount = new TreeMap<>();
+
Map<Character, Integer> mapCharacterToCount = new TreeMap<>();
for( char ch : text.toCharArray() ) {
+
for( char ch : text.toCharArray() ) {
// https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#compute-K-java.util.function.BiFunction-
+
// 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)-> {
+
mapCharacterToCount.compute(ch, (Character character, Integer count)-> {
if( count != null ) {
+
if( count != null ) {
//we have associated character before
+
//we have associated character before
return count+1;
+
return count+1;
} else {
+
} else {
//first encounter with character
+
//first encounter with character
return 1;
+
return 1;
}
 
});
 
 
}
 
}
for( Entry<Character, Integer> entry : mapCharacterToCount.entrySet() ) {
+
});
System.out.println(entry);
+
}
}</nowiki>
+
for( Entry<Character, Integer> entry : mapCharacterToCount.entrySet() ) {
 +
System.out.println(entry);
 +
}</nowiki>
  
 
{{CodeToInvestigate|LambdasMapComputeExample|demo|lambda.demo.compute}}
 
{{CodeToInvestigate|LambdasMapComputeExample|demo|lambda.demo.compute}}

Revision as of 05:24, 12 February 2022

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

x10.finish

X10 x10 = new ForkJoinX10();
System.out.println("start");

x10.void_finish(() -> {
	void_fork(() -> {
		sleepRandom(1_000);
		System.out.println("-apples");
	});
	void_fork(() -> {
		sleepRandom(1_000);
		System.out.println("--oranges");
	});
	void_fork(() -> {
		sleepRandom(1_000);
		System.out.println("---bananas");
	});
	void_fork(() -> {
		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//java
class: AnonymousInnerClassesAsyncAndFinishExample.java DEMO: Java.png
methods: main
package: lambda.demo.asyncfinish
source folder: src//java
class: NamedClassesAsyncAndFinishExample.java DEMO: Java.png
methods: main
package: lambda.demo.asyncfinish
source folder: src//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: demo
package: lambda.demo.compute
source folder: src//java
class: AnonymousInnerClassesMapComputeExample.java DEMO: Java.png
methods: demo
package: lambda.demo.compute
source folder: src//java
class: NamedClassesMapComputeExample.java DEMO: Java.png
methods: demo
package: lambda.demo.compute
source folder: src//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: student/src//java