<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Functional-Programming on Devops Monk</title><link>https://devops-monk.com/tags/functional-programming/</link><description>Recent content in Functional-Programming on Devops Monk</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 04 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://devops-monk.com/tags/functional-programming/index.xml" rel="self" type="application/rss+xml"/><item><title>Java 8 Overview: The Most Important Java Release Ever</title><link>https://devops-monk.com/tutorials/java8/java8-overview/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://devops-monk.com/tutorials/java8/java8-overview/</guid><description>Why Java 8 Matters Java 8 was released on 18 March 2014 — nearly three years after Java 7 — and it changed Java more fundamentally than any release before or since. For the first time, Java developers could write functional-style code natively, without external libraries or workarounds.
The headline features — lambda expressions and the Streams API — solved a problem that had frustrated Java developers for years: the verbosity of iteration.</description></item><item><title>Lambda Expressions (JEP 126): Syntax, Closures, and Target Typing</title><link>https://devops-monk.com/tutorials/java8/lambdas/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://devops-monk.com/tutorials/java8/lambdas/</guid><description>The Problem Lambdas Solve Before Java 8, passing behaviour as a value required an anonymous inner class:
// Java 7: sort a list of strings by length Collections.sort(names, new Comparator&amp;lt;String&amp;gt;() { @Override public int compare(String a, String b) { return Integer.compare(a.length(), b.length()); } }); // Run in a new thread new Thread(new Runnable() { @Override public void run() { System.out.println(&amp;#34;Hello from thread&amp;#34;); } }).start(); This works, but the boilerplate-to-intent ratio is terrible.</description></item><item><title>Method References: Four Kinds and When to Use Each</title><link>https://devops-monk.com/tutorials/java8/method-references/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://devops-monk.com/tutorials/java8/method-references/</guid><description>What Are Method References? A method reference is a compact syntax for a lambda expression that does nothing except call an existing method. If a lambda&amp;rsquo;s entire body is a method call, a method reference is almost always clearer.
// Lambda names.forEach(s -&amp;gt; System.out.println(s)); // Method reference — identical behaviour, fewer characters, clearer intent names.forEach(System.out::println); The :: operator is the method reference operator. It does not call the method — it creates a reference to it, which the compiler wraps into a lambda that calls the method.</description></item><item><title>Streams API: Lazy Pipelines and the Functional Data Model</title><link>https://devops-monk.com/tutorials/java8/streams-introduction/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://devops-monk.com/tutorials/java8/streams-introduction/</guid><description>The Problem Streams Solve Consider filtering a list of orders to find the names of active premium customers who spent over $500, sorted alphabetically:
// Java 7 List&amp;lt;String&amp;gt; result = new ArrayList&amp;lt;&amp;gt;(); for (Order order : orders) { if (order.isActive() &amp;amp;&amp;amp; order.isPremium() &amp;amp;&amp;amp; order.getTotal() &amp;gt; 500) { result.add(order.getCustomerName()); } } Collections.sort(result); This code is correct but reveals nothing about the structure of the computation at a glance. You have to read every line to understand what&amp;rsquo;s happening.</description></item></channel></rss>