Expanding LVTI support for Lambda Parameters in Java 11

Java 10 allows implicit typing for local variables. You can get a quick refresher here.

Fast forward 6 months, Java 11 will be supporting local variable syntax support for Lambda Parameters in an implicitly typed lambda expression.

Here is an example from the spec:

(var x, var y) -> x.process(y)

 

With this support, annotations can be added to local variables as they require full type.

(@NotNull var x, @Nullable var y) -> x.process(y)

Expanding the example from my earlier post. Lines #17 and #57 shows this support in action.


import org.jetbrains.annotations.NotNull;
import java.util.Comparator;
import java.util.function.ToLongFunction;
import java.util.stream.Stream;
public class RideProviderTest {
@FunctionalInterface
private interface RideProvider {
long getFareEstimate(String type);
}
public static void main(String[] args) {
// implicitly typed lambda expression
ToLongFunction<RideProvider> lyftProvider = (@NotNull var provider) -> provider.getFareEstimate("Lyft");
var lyft = new RideProvider() {
@Override
public long getFareEstimate(String type) {
var estimated_cost_cents_max = 0;
switch (type) {
case "Line":
estimated_cost_cents_max = 3307;
break;
case "Lyft":
estimated_cost_cents_max = 7306;
break;
case "Plus":
estimated_cost_cents_max = 12451;
break;
case "Premier":
estimated_cost_cents_max = 17562;
break;
case "Lux":
estimated_cost_cents_max = 23624;
break;
case "Lux SUV":
estimated_cost_cents_max = 25879;
break;
}
return estimated_cost_cents_max;
}
};
long lyftFare = lyftProvider.applyAsLong(lyft);
// implicitly typed lambda expression
ToLongFunction<RideProvider> uberProvider = (@NotNull var provider) -> provider.getFareEstimate("uberX");
var uber = new RideProvider() {
@Override
public long getFareEstimate(String type) {
var estimated_cost_cents_max = 0;
switch (type) {
case "POOL":
estimated_cost_cents_max = 7000;
break;
case "EXPRESS POOL":
estimated_cost_cents_max = 7000;
break;
case "uberX":
estimated_cost_cents_max = 9200;
break;
case "WAV":
estimated_cost_cents_max = 9200;
break;
case "ASSIST":
estimated_cost_cents_max = 9200;
break;
case "uberXL":
estimated_cost_cents_max = 14800;
break;
case "SELECT":
estimated_cost_cents_max = 20900;
break;
case "SUV":
estimated_cost_cents_max = 30600;
break;
}
return estimated_cost_cents_max;
}
};
long uberFare = uberProvider.applyAsLong(uber);
// compare the futures for best fare estimate
Stream.of(lyftFare, uberFare)
.
min(Comparator.comparing(i -> i))
.
ifPresent(estimated_cost_cents_max -> System.out.println("$" + estimated_cost_cents_max / 100));
}
}

Java 11 is releasing next month! IntelliJ IDEA 2018.2 has already added support for this feature.

Screen Shot 2018-08-20 at 1.05.40 AM

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s