<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>var on Shweta Kadam</title>
    <link>https://shwetakadam.com/tags/var/</link>
    <description>Recent content in var on Shweta Kadam</description>
    <image>
      <url>https://shwetakadam.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://shwetakadam.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sun, 20 Nov 2022 18:48:00 +0530</lastBuildDate><atom:link href="https://shwetakadam.com/tags/var/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Today I learnt: Interesting Things in Java 11</title>
      <link>https://shwetakadam.com/posts/today-i-learnt-interesting-things-in-java-11/</link>
      <pubDate>Sun, 20 Nov 2022 18:48:00 +0530</pubDate>
      
      <guid>https://shwetakadam.com/posts/today-i-learnt-interesting-things-in-java-11/</guid>
      <description>I came across a fascinating Java talk on youtube by Devoxx 2022 Hanno Embregts. This article is about a few java snippets I encountered. The purpose of today’s TIL is to have a list of interesting things we could do in Java and not deep dive into each concept.
Today’s TIL : Crazy things to do with Java 11+
Initializing Array and var keywordPermalink Having the var keyword in a statically typed language such as Java was fascinating in itself(an article on this in the future :).</description>
      <content:encoded><![CDATA[<p>I came across a fascinating Java talk on youtube by Devoxx 2022 Hanno Embregts. This article is about a few java snippets I encountered. The purpose of today’s TIL is to have a list of interesting things we could do in Java and not deep dive into each concept.</p>
<p>Today’s TIL : <strong><strong>Crazy things to do with Java 11+</strong></strong></p>
<h2 id="initializing-array-and-var-keywordpermalink">Initializing Array and var keywordPermalink</h2>
<p>Having the <code>var</code> keyword in a statically typed language such as Java was fascinating in itself(an article on this in the future :). But we never thought we would use it to initialize such as</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">var</span> <span class="n">element</span> <span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">];</span>       <span class="c1">//WORKS
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">var</span> <span class="o">[]</span> <span class="n">element</span><span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">];</span>      <span class="c1">// COMPILE ERROR :error: &#39;var&#39; is not allowed as an element type of an array
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Since</span> <span class="n">var</span> <span class="n">is</span> <span class="n">a</span> <span class="n">generic</span> <span class="n">element</span> <span class="n">type</span><span class="o">,</span> <span class="n">giving</span> <span class="n">it</span> <span class="n">array</span> <span class="o">[]</span> <span class="n">provides</span> <span class="n">an</span> <span class="n">error</span> <span class="n">since</span> <span class="n">rather</span> <span class="n">than</span> <span class="n">being</span> <span class="n">generic</span> <span class="n">we</span> <span class="n">are</span> <span class="n">giving</span> <span class="n">it</span> <span class="n">an</span> <span class="n">array</span> <span class="n">type</span><span class="o">.</span>
</span></span></code></pre></div><h2 id="c-style-arraypermalink">C style ArrayPermalink</h2>
<p>What is a c style array? Java supports providing [] before and after the variable name in an array</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"> <span class="kt">int</span> <span class="o">[]</span><span class="n">arr</span><span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">];</span>
</span></span><span class="line"><span class="cl"> <span class="kt">int</span> <span class="n">arr1</span><span class="o">[]=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">];</span>
</span></span></code></pre></div><p>In C style array, we provide [] after the variable name that is ~int arr1[].</p>
<p>So in Java, suppose we have the following code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl">       <span class="kt">int</span> <span class="n">arr1</span><span class="o">[],</span><span class="n">arr2</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">       <span class="n">arr1</span><span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">1</span><span class="o">];</span>
</span></span><span class="line"><span class="cl">       <span class="n">arr2</span><span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">1</span><span class="o">];</span>        <span class="c1">//COMPILE ERROR : error: incompatible types: int[] cannot be converted to int
</span></span></span></code></pre></div><p>The above code will result in COMPILE ERROR for arr2 since arr2 is not an array but a primitive int variable. But if we want to want both arr1 and arr12 as array type we need to change the declaration to</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl">       <span class="kt">int</span> <span class="o">[]</span> <span class="n">arr1</span><span class="o">,</span><span class="n">arr2</span><span class="o">;</span> <span class="c1">//Notice how [] are
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>       <span class="n">arr1</span><span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">1</span><span class="o">];</span>
</span></span><span class="line"><span class="cl">       <span class="n">arr2</span><span class="o">=</span><span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="mi">1</span><span class="o">];</span>
</span></span></code></pre></div><h2 id="arrays-dot-aslist-and-primitives">Arrays.asList and Primitives</h2>
<p>Let’s look at the following example :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">String</span> <span class="o">[]</span> <span class="n">strArr</span><span class="o">={</span><span class="s">&#34;one&#34;</span><span class="o">,</span><span class="s">&#34;two&#34;</span><span class="o">,</span><span class="s">&#34;three&#34;</span><span class="o">};</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">stringList</span><span class="o">=</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">strArr</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="o">[]</span> <span class="n">intArray</span> <span class="o">=</span> <span class="o">{</span><span class="mi">1</span><span class="o">,</span><span class="mi">2</span><span class="o">,</span><span class="mi">3</span><span class="o">};</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">intList</span> <span class="o">=</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">intArray</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">stringList</span><span class="o">.</span><span class="na">contains</span><span class="o">(</span><span class="s">&#34;one&#34;</span><span class="o">)+</span><span class="s">&#34; &#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl"><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="n">intList</span><span class="o">.</span><span class="na">contains</span><span class="o">(</span><span class="mi">1</span><span class="o">));</span>
</span></span><span class="line"><span class="cl"><span class="nl">
</span></span></span><span class="line"><span class="cl"><span class="nl">Output:</span> <span class="kc">true</span> <span class="kc">false</span>
</span></span></code></pre></div><p>Signature of Arrays.asList is var-args or List of T’s.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl">      <span class="kd">public</span> <span class="kd">static</span> <span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="nf">asList</span><span class="o">(</span><span class="n">T</span><span class="o">...</span> <span class="n">a</span><span class="o">)</span>
</span></span></code></pre></div><p>T is of generic type so that means it needs to reference a Type such as Integer,Float and not reference Array of Ints</p>
<p>But next question is Can they boxed ? (Autoboxing: Converting primitive to Class Type example : int -&gt; Integer) Answer is no Array of ints -&gt; Cannot be boxed -&gt; Array of Integer</p>
<blockquote>
<p>Don’t use Arrays.asList on primitives</p>
</blockquote>
<h2 id="no-structural-changes-allowed-in-arraypermalink">No structural changes allowed in ArrayPermalink</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">String</span> <span class="o">[]</span> <span class="n">ints</span> <span class="o">={</span><span class="s">&#34;a&#34;</span><span class="o">,</span><span class="s">&#34;b&#34;</span><span class="o">,</span><span class="s">&#34;c&#34;</span><span class="o">,</span><span class="kc">null</span><span class="o">};</span>
</span></span><span class="line"><span class="cl"><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">strings</span><span class="o">=</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">ints</span><span class="o">);</span>
</span></span><span class="line"><span class="cl"><span class="n">strings</span><span class="o">.</span><span class="na">removeIf</span><span class="o">(</span><span class="n">Objects</span> <span class="o">::</span> <span class="n">isNull</span><span class="o">);</span>
</span></span><span class="line"><span class="cl"><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">strings</span><span class="o">.</span><span class="na">size</span><span class="o">());</span>
</span></span><span class="line"><span class="cl"><span class="nl">Output:</span> <span class="n">Exception</span> <span class="n">in</span> <span class="n">thread</span> <span class="err">“</span><span class="n">main</span><span class="err">”</span> <span class="n">java</span><span class="o">.</span><span class="na">lang</span><span class="o">.</span><span class="na">UnsupportedOperationException</span><span class="o">:</span> <span class="n">remove</span> <span class="n">at</span> <span class="n">java</span><span class="o">.</span><span class="na">base</span><span class="o">/</span><span class="n">java</span><span class="o">.</span><span class="na">util</span><span class="o">.</span><span class="na">Iterator</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="n">Iterator</span><span class="o">.</span><span class="na">java</span><span class="o">:</span><span class="mi">102</span><span class="o">)</span>
</span></span></code></pre></div><p>Because the array does not allow any structural changes to it</p>
<h2 id="a-unique-way-to-remove-null-values-from-map">A Unique way to remove null values from Map</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">Map</span><span class="o">&lt;</span><span class="n">Integer</span><span class="o">,</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">map</span><span class="o">=</span><span class="k">new</span> <span class="n">HashMap</span><span class="o">();</span>
</span></span><span class="line"><span class="cl"><span class="n">map</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span><span class="kc">null</span><span class="o">);</span> <span class="c1">//currently map has key:4 value: null
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">map</span><span class="o">.</span><span class="na">getOrDefault</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span><span class="s">&#34;four&#34;</span><span class="o">));</span>
</span></span><span class="line"><span class="cl"><span class="n">map</span><span class="o">.</span><span class="na">putIfAbsent</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span><span class="s">&#34;four&#34;</span><span class="o">);</span>     <span class="c1">//key key:4 value:four
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">map</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">4</span><span class="o">));</span>
</span></span><span class="line"><span class="cl"><span class="nl">
</span></span></span><span class="line"><span class="cl"><span class="nl">Output:</span> <span class="kc">null</span><span class="o">,</span><span class="n">four</span>
</span></span></code></pre></div><p>##</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">var</span> <span class="n">numbers</span> <span class="o">=</span> <span class="n">List</span><span class="o">.</span><span class="na">of</span><span class="o">(-</span><span class="mi">1</span><span class="o">,</span><span class="mi">0</span><span class="o">,</span><span class="mi">1</span><span class="o">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Map</span><span class="o">&lt;</span><span class="n">Integer</span><span class="o">,</span><span class="n">List</span><span class="o">&lt;</span><span class="n">Integer</span><span class="o">&gt;&gt;</span> <span class="n">map</span><span class="o">=</span><span class="k">new</span> <span class="n">HashMap</span><span class="o">&lt;&gt;();</span>
</span></span><span class="line"><span class="cl"><span class="n">numbers</span><span class="o">.</span><span class="na">forEach</span><span class="o">(</span><span class="n">number</span><span class="o">-&gt;</span> <span class="n">map</span><span class="o">.</span><span class="na">putIfAbsent</span><span class="o">(</span><span class="n">number</span><span class="o">,</span><span class="k">new</span> <span class="n">ArrayList</span><span class="o">&lt;&gt;())</span>
</span></span><span class="line"><span class="cl">               <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">number</span><span class="o">));</span>
</span></span><span class="line"><span class="cl"><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">map</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">0</span><span class="o">));</span>
</span></span><span class="line"><span class="cl"><span class="nl">
</span></span></span><span class="line"><span class="cl"><span class="nl">Output:</span> <span class="n">NullPointerException</span><span class="o">:</span> <span class="n">Exception</span> <span class="n">in</span> <span class="n">thread</span> <span class="err">“</span><span class="n">main</span><span class="err">”</span> <span class="n">java</span><span class="o">.</span><span class="na">lang</span><span class="o">.</span><span class="na">NullPointerException</span> <span class="n">at</span> <span class="n">HelloWorld</span><span class="o">.</span><span class="na">lambda$main$0</span><span class="o">(</span><span class="n">HelloWorld</span><span class="o">.</span><span class="na">java</span><span class="o">:</span><span class="mi">33</span><span class="o">)</span>
</span></span></code></pre></div><p>Because map.putIfAbsent returns null if no value is present</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
