Overfullstack Overfullstack
Functional Programming

Kung fu Lambda ƛ

Fun in Functional Programming with Java 8 and how it is competing with younger functional languages.

FP vs OOP Simply:

Only Java 8?

Functional Programming is just a different way of thinking about structuring your code. Java 8, just provides new toys to make it handy. That said, FP can be implemented even in Java 6, using anonymous inner classes in place of lambdas.

Why Functional Programming?

firstclassfunction.java
private static Function<String, String> lastWord = (String phrase) ->
Arrays.asList(phrase.split(" ")).stream()
.reduce((other, last) -> last)
.orElse("");

Thinking in FP

functionalinterface.java
@FunctionalInterface
public static interface FunctionOf3 {
public double apply(double a, double b, double c);
}
static FunctionOverTime combinationOf3(FunctionOverTime a, FunctionOverTime b, FunctionOverTime c, FunctionOf3 combination) {
return (time) -> combination.apply(a.valueAt(time), b.valueAt(time), c.valueAt(time));
}

Streams

lazystream.java
List<Integer> list = Arrays.asList(1, 10, 3, 7, 5);
int a = list.stream()
.peek(num -> System.out.println("will filter " + num))
.filter(x -> x > 5)
.findFirst()
.get();
System.out.println(a);
/*
This outputs:
will filter 1
will filter 10
10
*/
supplier.java
Supplier<DoubleStream> totalStream = () -> saleStream().mapToDouble(Sale::total);
boolean bigSaleDay = totalStream.get().anyMatch(total -> total > 100.00);
mapandflatmap.java
Stream<Stream<Item>> itemStream1 = saleStream().map(sale -> sale.items.stream());
Stream<Item> itemStream2 = saleStream().flatMap(sale -> sale.items.stream());
infinitestream.java
public static Supplier<Sale> supplier = () -> new Sale(...);
return Stream.generate(supplier).limit(quantity);

Conclusion

Tit-Bits

Back to all articles