<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Karl Heinz Marbaise on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/karl-heinz-marbaise/</link><description>Articles written by Karl Heinz Marbaise on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 16 Jun 2025 07:42:00 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/karl-heinz-marbaise/index.xml" rel="self" type="application/rss+xml"/><item><title>Foojay Podcast #73: JCon Report, Part 2 – Evolutions in the Java language and runtime</title><link>https://foojayio.github.io/website/today/foojay-podcast-73/</link><pubDate>Mon, 16 Jun 2025 07:42:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-73/</guid><description>&lt;p&gt;In the second part of our JCON interviews, recorded at the conference in May, we focuses on general evolutions within the Java world and how they influence how we write code and develop applications. We take a look back at the history of Java, discuss new features in the latest release, how Java evolves with OpenJDK projects and JEPS, how Java is used in education, and much more&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/T9_5LYsFZn8?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Foojay Podcast #50: JCON Report, Part 2 - Maven, Software Security, Code Quality</title><link>https://foojayio.github.io/website/today/foojay-podcast-50/</link><pubDate>Mon, 27 May 2024 08:07:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-50/</guid><description>&lt;p&gt;This is part 2 of the interviews we recorded at the JCON conference earlier this month in Germany. In this episode, you get two main topics: &lt;strong&gt;Maven and Code Quality&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In the first part, you&amp;rsquo;ll hear Karl Heinz Marbaise and Steve Poole discuss the Maven project, the repository, Sonaytype, and the security impact of dependencies.&lt;/p&gt;
&lt;p&gt;But next to security, we developers are also responsible for creating readable and maintainable code. Miro Wengner, Marit van Dijk, and Hinse ter Schuur dive into this topic, in the second part!&lt;/p&gt;</description></item><item><title>Spring Boot: Strategy Design Pattern - Convenience and Limitation</title><link>https://foojayio.github.io/website/today/spring-boot-strategy-design-pattern-convenience-and-limitation/</link><pubDate>Fri, 30 Oct 2020 09:22:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-strategy-design-pattern-convenience-and-limitation/</guid><description>&lt;p&gt;You might have already used the &lt;a href="https://en.wikipedia.org/wiki/Strategy_pattern" target="_blank" rel="noopener noreferrer"&gt;strategy pattern&lt;/a&gt;
 in relationship with Spring Boot where it is very convenient to use.&lt;/p&gt;
&lt;p&gt;You simply define an interface for example (I use the prefixing &lt;code&gt;I&lt;/code&gt; only in these examples for clarity):&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;public interface IOneStrategy {
 void executeTheThing();
}&lt;/pre&gt;
&lt;p&gt;Define some implementations like this:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;@Service("FIRST")
public class OneStrategyFirst implements IOneStrategy {

 @Override
 public void executeTheThing() {
 System.out.println("OneStrategyFirst.executeTheThing");
 }
}&lt;/pre&gt;
&lt;p&gt;Now you can simply implement a service which will execute the appropriate strategy based on the given name which looks similar like this:&lt;/p&gt;</description></item><item><title>Stream.concat vs. New ArrayList Performance</title><link>https://foojayio.github.io/website/today/performance-stream-concat-vs-new-arraylist/</link><pubDate>Thu, 27 Aug 2020 05:34:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/performance-stream-concat-vs-new-arraylist/</guid><description>&lt;p&gt;During a code review, I suggested some code improvements related to JDK8+ streams. The original code looked very similar to the following:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;List&amp;lt;Element&amp;gt; result = content.getFancyStuffs().stream()
 .flatMap(item -&amp;gt; {
 List&amp;lt;Element&amp;gt; objects = new ArrayList&amp;lt;&amp;gt;();
 objects.add(item.getElement());
 objects.addAll(item.getElements());
 return objects.stream();
 })
 .collect(toList());&lt;/pre&gt;
&lt;p&gt;Some more details here &amp;mdash; the &lt;code&gt;getFancyStuffs()&lt;/code&gt; returns a list of &lt;code&gt;FancyStuff&lt;/code&gt; elements. The &lt;code&gt;FancyStuff&lt;/code&gt; class contains two getters where &lt;code&gt;getElement()&lt;/code&gt; returns a single &lt;code&gt;Element&lt;/code&gt; whereas the &lt;code&gt;getElements()&lt;/code&gt; returns (guess what?) a list of &lt;code&gt;Element&lt;/code&gt;s.&lt;/p&gt;</description></item></channel></rss>