<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ABHINAVA GHOSH (he/him)</title>
    <description>The latest articles on DEV Community by ABHINAVA GHOSH (he/him) (@the_unconventional_coder).</description>
    <link>https://dev.to/the_unconventional_coder</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418312%2F62453d2f-2488-44ac-9f8d-59fe11cc34df.jpg</url>
      <title>DEV Community: ABHINAVA GHOSH (he/him)</title>
      <link>https://dev.to/the_unconventional_coder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/the_unconventional_coder"/>
    <language>en</language>
    <item>
      <title>Opinion needed .</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Tue, 17 Nov 2020 09:55:13 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/opinion-needed-3740</link>
      <guid>https://dev.to/the_unconventional_coder/opinion-needed-3740</guid>
      <description>&lt;p&gt;I am in a confusion as to which software to go for next .&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React Native or Flutter for android development.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please help me choose ,and I would like to know what you  think is better and why .&lt;/p&gt;

&lt;p&gt;Thank you in advance.&lt;/p&gt;

</description>
      <category>help</category>
      <category>reactnative</category>
      <category>flutter</category>
      <category>android</category>
    </item>
    <item>
      <title>intel chipsets -  
NOMENCLATURE demystified ! </title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Sun, 11 Oct 2020 14:12:20 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/intel-cores-nomenclature-2ld5</link>
      <guid>https://dev.to/the_unconventional_coder/intel-cores-nomenclature-2ld5</guid>
      <description>&lt;p&gt;Have you ever wondered what are those weird naming - conventions used in machines powered by intel processors , and have just asked the salesperson for their recommendation ,just because you did not understand which one is better than the other and what difference does each number and letter make on the whole performance of the chipset !&lt;/p&gt;

&lt;p&gt;Well , after reading this post , you will now feel much more confident on your own decision and don't have to ask for help from others. 😎&lt;/p&gt;




&lt;p&gt;All intel chips  have 3 basic parts and each of them have different roles .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-sku-graphic-wht.png.rendition.intel.web.480.270.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-sku-graphic-wht.png.rendition.intel.web.480.270.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-brand-name-wht.png.rendition.intel.web.256.192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-brand-name-wht.png.rendition.intel.web.256.192.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Brand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Intel naming scheme starts with the processor’s brand—the overall product line the processor was created for. Today, the most common Intel® processor names begin with Intel® Core™, Intel® Pentium®, and Intel® Celeron®. Intel® Pentium® and Intel® Celeron® processors are economical product lines created for price-conscious consumers. Intel® Core™ processors bring faster performance and additional features not available in Intel® Pentium® and Intel® Celeron® models.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-brand-modifier-wht.png.rendition.intel.web.256.192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-brand-modifier-wht.png.rendition.intel.web.256.192.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Brand Modifier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Intel® Core™ processor series include a brand modifier before the remaining parts of the model number. Intel® Pentium® and Intel® Celeron® processors do not use this naming convention. Today, the Intel® Core™ processor series includes the brand modifiers i3, i5, i7, and i9&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-gen-wht-rwd.png.rendition.intel.web.256.192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-gen-wht-rwd.png.rendition.intel.web.256.192.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Generation Indicator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the brand and brand modifier comes the processor’s generation indicator. Intel® processor generations are identified in the processor number in all Intel® Core™ processor brands. In a four-digit processor number, the first digit typically represents the generation. For example, a processor with the digits 9800 is a 9th gen processor, while one labeled 8800 is 8th gen technology.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-sku-number-wht-rwd.png.rendition.intel.web.256.192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-sku-number-wht-rwd.png.rendition.intel.web.256.192.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;SKU Numeric Digits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the majority of Intel® processors, the final three digits of the product number are the SKU. SKUs are generally assigned in the order in which processors in that generation and product line are developed. A higher SKU within otherwise-identical processor brands and generations will generally have more features. However, SKU numbers are not recommended for comparison across different generations or product lines.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-product-line-wht-rwd.png.rendition.intel.web.256.192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.intel.com%2Fcontent%2Fdam%2Fwww%2Fpublic%2Fus%2Fen%2Fimages%2Fillustrations%2FRWD%2F10th-gen-1065-g7-product-line-wht-rwd.png.rendition.intel.web.256.192.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Product Line Suffix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The SKU suffix is another key indicator of the processor’s capabilities. These remaining differences are indicated by a letter-based product line suffix. For example, within the Intel® Core™ processor series, U indicates a processor that has been designed for power-efficient laptops or 2 in 1s. Meanwhile, XE indicates an “extreme edition” processor for desktops designed for maximum performance.&lt;/p&gt;




&lt;p&gt;Now that we have a basic idea of what it means , lets  have a better look into things.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626154%2Cwidth-640%2Cresizemode-4%2Cimgsize-84672%2FThe-number-next-to-the-i-after-Core-represents-the-kind-of-overarching-performance-a-chip-has.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626154%2Cwidth-640%2Cresizemode-4%2Cimgsize-84672%2FThe-number-next-to-the-i-after-Core-represents-the-kind-of-overarching-performance-a-chip-has.jpg" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;The number next to the 'i' after 'Core' represents the kind ofr over-achieving performance a chip is capable of&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Core "i3" chip is on the lower end of performance that's best suited for budget computers.&lt;/p&gt;

&lt;p&gt;A Core "i5" chip is on the mid-range of performance that's suited for casual users and power users on a budget. &lt;/p&gt;

&lt;p&gt;A Core "i7" chip is on the higher end of performance that's suited for power users and professionals for power-hungry apps like Photoshop or video editing. &lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626153%2Cwidth-640%2Cresizemode-4%2Cimgsize-87409%2FThe-first-of-the-four-numbers-on-Intels-Core-chips-represents-the-generation-of-the-chip.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626153%2Cwidth-640%2Cresizemode-4%2Cimgsize-87409%2FThe-first-of-the-four-numbers-on-Intels-Core-chips-represents-the-generation-of-the-chip.jpg" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯  &lt;strong&gt;The first of the four numbers on Intel's Core chips represents the generation of the chip.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Intel's eighth and latest generation of chips will always have an "8" as the first number in the four-numbered grouping after the "iX" part. &lt;/p&gt;

&lt;p&gt;The seventh generation will have a "7," and so on&lt;/p&gt;

&lt;p&gt;The lower the number, the older the generation. When you're buying a new computer, you're generally avoiding those with chips that are two or more generations behind the latest generation. &lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626152%2Cwidth-640%2Cresizemode-4%2Cimgsize-89015%2FThe-three-following-numbers-after-the-generation-number-represent-performance-The-higher-the-numbers-the-more-powerful-the-chip.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626152%2Cwidth-640%2Cresizemode-4%2Cimgsize-89015%2FThe-three-following-numbers-after-the-generation-number-represent-performance-The-higher-the-numbers-the-more-powerful-the-chip.jpg" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;The three following numbers after the generation number represent performance. The higher the numbers, the more powerful the chip&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, an Intel Core i5 "8400" will be less powerful than a Core i5 "8600" . &lt;/p&gt;

&lt;p&gt;The major difference is "clock speed" and "boost clock speed." The higher the clock speeds, the faster the chip can process what you want.&lt;/p&gt;

&lt;p&gt;A casual user could opt for a cheaper computer with the Core i5 8400, while a power user on a budget could opt for computers with the slightly more expensive Core i5 8600 for an extra boost of power. &lt;/p&gt;

&lt;p&gt;These numbers make a smaller difference than the number in the "iX" part, but they're still important. &lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626151%2Cwidth-640%2Cresizemode-4%2Cimgsize-89342%2FWhat-the-letters-mean-after-the-numbers.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.businessinsider.in%2Fthumb%2Fmsid-65626151%2Cwidth-640%2Cresizemode-4%2Cimgsize-89342%2FWhat-the-letters-mean-after-the-numbers.jpg" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯  &lt;strong&gt;What the letters mean after the numbers?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Intel's chips have letters like "K" and "U" after the numbers that give you an idea of what kind of purpose and performance the computer is designed for. &lt;/p&gt;

&lt;p&gt;Intel's chips have letters like "K" and "U" after the numbers that give you an idea of what kind of purpose and performance the computer is designed for. &lt;/p&gt;

&lt;p&gt;The "K" chips are usually the fastest, with higher clock speeds than the standard chips without a letter in Intel's mainstream chips. It also means the chip is "unlocked," where its clock speeds can be tweaked — or "overclocked — by a user to squeeze out a little extra performance than what you get out of the box. Usually, it's mostly enthusiasts who tend to overclock their chips, and they're mostly designed for desktops or high-performance laptops.&lt;/p&gt;

&lt;p&gt;The "G"  means the chip has a built-in graphics processor. Most of Intel's chips come with basic built-in graphics processors so you can display something on your monitor without an entirely separate graphics card. But Intel's "G" processors come with a more powerful graphics processor for more power-hungry apps and games. Surprisingly, the graphics processors in Intel's "G" chips come from the company's main rival, AMD. &lt;/p&gt;

&lt;p&gt;The "T" means the chips is designed to use less power while also having less performance than the standard chips without any letters. &lt;/p&gt;

&lt;p&gt;The "U" means the chip is designed for laptops and mobile devices, as "U" chips are Intel's "ultra-low power" models. They're "low power" because they use even less power than the "T" models and have slower clock speeds than their full-size, non "U" equivalents. By having slower clock speeds, they don't get as hot and have a lower risk of heat-related damage. That's good for thin laptops that have limited cooling compared to larger desktops and laptops.&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Suffix&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;G1-G7&lt;/td&gt;
&lt;td&gt;Graphics level (processors with new integrated graphics technology only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;Embedded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Requires discrete graphi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;Includes discrete graphics on package&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H&lt;/td&gt;
&lt;td&gt;High performance optimized for mobile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HK&lt;/td&gt;
&lt;td&gt;High performance optimized for mobile, unlocked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HQ&lt;/td&gt;
&lt;td&gt;High performance optimized for mobile, quad core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K&lt;/td&gt;
&lt;td&gt;Unlocked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;td&gt;Special edition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T&lt;/td&gt;
&lt;td&gt;Power-optimized lifestyle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;U&lt;/td&gt;
&lt;td&gt;Mobile power efficient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;Mobile extremely low power&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;For better visual understanding&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=GLSPub4ydiM" rel="noopener noreferrer"&gt;Linus tech-tips&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=4a9DBU4sROA" rel="noopener noreferrer"&gt;Another Linus' video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please leave a ❤️ if you liked this post!&lt;br&gt;
A 🦄 would be great!&lt;/p&gt;

&lt;p&gt;And feel free to  let me know  in the discussions if you think i missed something.&lt;/p&gt;

&lt;p&gt;HAVE A GOOD DAY!&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>architecture</category>
      <category>computerscience</category>
      <category>career</category>
    </item>
    <item>
      <title>Java 7 -&gt; Java 8 </title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Sun, 23 Aug 2020 16:42:38 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/java-7-java-8-pea</link>
      <guid>https://dev.to/the_unconventional_coder/java-7-java-8-pea</guid>
      <description>&lt;p&gt;We all as Java Developers will agree that Java 8 is the best upgrade that Java/Oracle pushed till now.&lt;br&gt;
Although the latest version  of Java is Java 14 but still the most used version of Java is Java 8.&lt;/p&gt;

&lt;p&gt;So in this post I will be discussing the major changes that were pushed by the "Java Creators" from transitioning from Java  7 - &amp;gt;  Java 8.&lt;/p&gt;

&lt;p&gt;❗ &lt;strong&gt;[DISCLAIMER]-This will be a long post , because i wanted it to be the single core resource for Java 7 -&amp;gt; Java 8 transition, which will help developers in the future as they get everything in one single post and do not have to refer to any other resource .&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So sit tight and enjoy !! ✨&lt;/p&gt;



&lt;p&gt;📋 Here we mainly discuss the differences, or in other words advancements that have been included in Java 8 when compared to Java 7.&lt;br&gt;
To begin with, let me give a brief introduction to Java 7. Java 7 was released in 2011. This was the first major update of Java after being acquired by Oracle from Sun Microsystems. Java 7 is the final Java version that would officially support Windows XP.&lt;/p&gt;

&lt;p&gt;📎 There were some major features that were included in Java 7. Such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compressed 64-bit pointers.&lt;/li&gt;
&lt;li&gt;Upgraded class-loader architecture.&lt;/li&gt;
&lt;li&gt;Multiple exception handling.&lt;/li&gt;
&lt;li&gt;JVM support for dynamically support languages.&lt;/li&gt;
&lt;li&gt;Upgraded Rowset 1.1 and JDBC 4.1.&lt;/li&gt;
&lt;li&gt;String object in a switch statement.&lt;/li&gt;
&lt;li&gt;Automatic resource management in a try statement and much more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📒 But in this blog, our main concern will be on discussing a few advancements that happened when updating from Java 7 to Java 8.&lt;br&gt;
Java 8 was released in March 2014. The most anticipated feature — Lambda Expressions, was introduced and made possible from Java 8. The use of this Lambda Expressions made Java closer to functional programming which it was not used to be. Java 8 also includes a faster and improved JVM which makes it possible to run programs more efficiently.&lt;/p&gt;

&lt;p&gt;📎 Now it is time to point out and discuss some of the major upgrades of Java 8 when compared to Java 7.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda Expressions&lt;/li&gt;
&lt;li&gt;Lambda expressions only have a body and a parameter list.&lt;/li&gt;
&lt;li&gt;Advantages we get by using Lambda Expressions are,&lt;/li&gt;
&lt;li&gt;Enhanced iterative syntax.&lt;/li&gt;
&lt;li&gt;Readability.&lt;/li&gt;
&lt;li&gt;Code Reuse.&lt;/li&gt;
&lt;li&gt;JAR file size reduction.&lt;/li&gt;
&lt;li&gt;Simplified variable scope.&lt;/li&gt;
&lt;li&gt;Encouraging Functional Programming.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Let us look at a couple of examples using lambda expressions:-&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R9Jx1y3d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/874/1%2Am989nccYUifUSq__fDJ8Ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R9Jx1y3d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/874/1%2Am989nccYUifUSq__fDJ8Ww.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
   lambda expression with no arguments passed ☝️&lt;/p&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kqs5I9Gx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/865/1%2AGCAr46ui55zpiQnwdE5RLw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kqs5I9Gx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/865/1%2AGCAr46ui55zpiQnwdE5RLw.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
   Lambda Expression with One Arguments Passed ☝️&lt;/p&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RdqQ5gej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/853/1%2AMyRPIzNxXR94QegkxD7a5Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RdqQ5gej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/853/1%2AMyRPIzNxXR94QegkxD7a5Q.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
Lambda Expression with Two Arguments Passed ☝️&lt;/p&gt;



&lt;p&gt;In Java, a functional interface is an interface that has only one abstract method.&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Null Reference Template&lt;/strong&gt;&lt;br&gt;
We can also call it the Java Optional Class.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advantages using the Java Optional class are,&lt;/li&gt;
&lt;li&gt;No Null Pointer Exceptions at run-time.&lt;/li&gt;
&lt;li&gt;Clean APIs can be developed.&lt;/li&gt;
&lt;li&gt;Null checks are not required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bKDGUQxx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/864/1%2ALkwQwi3QD1H1skQhXuGWYA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bKDGUQxx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/864/1%2ALkwQwi3QD1H1skQhXuGWYA.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
Java Optional Class Example ☝️&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;New Date and Time API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In java.util.Date class the years starting from 1900 and the months start from 0. So it is important to know it, as when we want to assign a year and a month it must be as (YYYY-1900) and (MM-1). This was overcome in Java 8 using the classes in java.time package.&lt;br&gt;
Unlike integer or string, the Date class is mutable. Which means that the date can be changed without the owner class knowing. Java 8 has a solution for this. The LocalDate, LocalTime, LocalDateTime, etc. introduced in Java 8 are immutable (The original object is not changed. Whenever a change is done, a new object will be returned).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sXNCL87n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/875/1%2A_YHS9pKQQK5D_AJqtnSSIA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sXNCL87n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/875/1%2A_YHS9pKQQK5D_AJqtnSSIA.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
Use of the New Date and Time API ☝️&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Unsigned Integer Arithmetic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is not clear what Java 8 has tried to achieve by the advancement in unsigned integer arithmetic. But generally, an unsigned integer is considered to be harmful to Java. It adds complexity to the type conversion tools, type system, and library APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g98yM5eZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/870/1%2AdHvTtGB5V2Z4DFMntzRMFg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g98yM5eZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/870/1%2AdHvTtGB5V2Z4DFMntzRMFg.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Stream API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The main advantage that we get using the Stream API is that it clearly increases the speed and efficiency of the program. It is considered to be a powerhouse in Java.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F5hfh490--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/875/1%2A_LFTbDXOqiR3imK7MNdNeA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F5hfh490--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/875/1%2A_LFTbDXOqiR3imK7MNdNeA.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Parallel Sorting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Parallel sorting uses multiple threads for the operation. It makes the program fast and efficient. This will not be that much visible with a small data set. But if we use large data set the efficiency and the increase in performance will be highly noticeable.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NeaWLR9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/865/1%2AShUh_QTCtcUzkafqP1_e3A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NeaWLR9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/865/1%2AShUh_QTCtcUzkafqP1_e3A.png" alt="Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credits-@Chinthaka Jayatilake .&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;New JavaScript Engine&lt;/strong&gt; (deprecated after Java 11)&lt;/p&gt;

&lt;p&gt;The JavaScript Engine introduced with Java 8 was named Nashorn.&lt;br&gt;
With that now, we have come to the end of this section and the main aim of it was to give an idea about the updated and added features in Java 8 compared to Java 7. According to the examples provided hope you got an idea on how to use these advancements for your benefit. Most of these provide us with advantages but there are certain drawbacks as well if we look at different perspectives. It is important to remember, only to absorb the features that would help us and make our program more efficient, reliable, and stable.&lt;/p&gt;



&lt;p&gt;Now lets go into a little deeper into some important concepts that are used very often.&lt;/p&gt;

&lt;p&gt;Java 8 method references are the shortened versions of lambda expressions calling a specific method. For example, lambda expression (Student s) -&amp;gt; s.getName() which is calling a method getName() of Student class can be shortened as Student::getName using Java 8 method references. Let’s see them in detail.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Java 8 Method References :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;📌 Definition:-&lt;br&gt;
Java 8 method references can be defined as shortened versions of lambda expressions calling a specific method. Method references are the easiest way to refer a method than the lambdas calling a specific method. Method references will enhance the readability of your code.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;📎 &lt;strong&gt;Method reference to static method&lt;/strong&gt; :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ClassName::MethodName&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use this syntax when you are referring to a static method.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Integer::parseInt, Math::max&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;📎 &lt;strong&gt;Method reference to instance method of an existing object :&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ReferenceVariable::MethodName&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use this syntax when you are referring to an instance method of already existing object.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;s::getName&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;where ‘s’ is a reference variable referring to Student object which already exist.&lt;/p&gt;

&lt;p&gt;📎 &lt;strong&gt;Method reference to instance method of non-existing object :&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ClassName::MethodName&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use this syntax when you are referring to an instance method by passing reference variables as an argument.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(Student s) -&amp;gt; s.getName() can be written as &lt;br&gt;
Student::getName&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;📌 &lt;strong&gt;Constructor References&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can also refer to the constructor of a class same as method references. Syntax for referring to constructor is:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ClassName::new&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2TErsmcH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/javaconceptoftheday.com/wp-content/uploads/2019/03/Java8MethodReferences.png%3Fssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2TErsmcH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/javaconceptoftheday.com/wp-content/uploads/2019/03/Java8MethodReferences.png%3Fssl%3D1" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Java 8 Interface Changes : Default Methods And Static Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It has been a tough task for Java API developers to add new methods to current interfaces. Because, even if you add a single abstract method to an interface, all existing implementations of that interface have to be updated with implementation of new method. What if there exist hundreds or thousands of implementations of an interface? Even worse, What if you don’t have control over all of those implementations? To overcome such overhead, new features are introduced to interfaces from Java 8. They are default methods and static methods. In this article, we will see these new Java 8 Interface Changes.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Java 8 Interface Changes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From Java 8, interfaces can also have concrete methods i.e methods with body along with abstract methods. This is the major change introduced to interfaces in Java 8 to help Java API developers to update and maintain the interfaces. The interfaces can have concrete methods either in the form of default methods or static methods.&lt;/p&gt;



&lt;p&gt;🎯  &lt;strong&gt;Default Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definition With Example:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Default methods of an interface are the concrete methods i.e methods with body for which implementing classes need not to give implementation. They inherit default implementation. Default methods start with the modifier default.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface InterfaceWithDefaultMethod
{
    void abstractMethod();           //Abstract Method

    default void defaultMethod()
    {
        System.out.println("It is a default method");
    }
}

class AnyClass implements InterfaceWithDefaultMethod
{
    @Override
    public void abstractMethod() 
    {
        System.out.println("Abstract Method implemented");
    }

    //No need to implement defaultMethod()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;🎯  &lt;strong&gt;Why Default Methods?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Default methods are introduced to add extra features to current interfaces without disrupting their existing implementations. For example, stream() is a default method which is added to Collection interface in Java 8. If stream() would have been added as abstract method, then all classes implementing Collection interface must have implemented stream() method which may have irritated existing users.&lt;/p&gt;

&lt;p&gt;Thanks to Java 8 default method feature, now it is a default method, all implementations of Collection interface inherit default implementation of stream() method.&lt;/p&gt;




&lt;p&gt;🎯  &lt;strong&gt;Three Rules To Solve Diamond Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Java, a class can extend only one class but can implement multiple interfaces. With the introduction of default methods, it is possible that your class inherit multiple methods with same signature. In such scenarios, to solve the conflict, Java 8 specifies 3 rules to follow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iyCG8oK0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i2.wp.com/javaconceptoftheday.com/wp-content/uploads/2019/03/Java8InterfaceChanges.png%3Fssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iyCG8oK0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i2.wp.com/javaconceptoftheday.com/wp-content/uploads/2019/03/Java8InterfaceChanges.png%3Fssl%3D1" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;🎯  &lt;strong&gt;Static Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definition With Example&lt;/strong&gt;&lt;br&gt;
From Java 8, interfaces can also have static methods. Static methods are also concrete methods but they can’t be implemented.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface InterfaceWithDefaultAndStaticMethod
{
    void abstractMethod();           //Abstract Method

    default void defaultMethod()
    {
        System.out.println("It is a default method");
    }

    static void staticMethod()
    {
        System.out.println("It is a static method");
    }
}

class AnyClass implements InterfaceWithDefaultAndStaticMethod
{
    @Override
    public void abstractMethod() 
    {
        System.out.println("Abstract Method implemented");
    }

    //No need to implement defaultMethod()

    //Can't implement staticMethod()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;🎯  &lt;strong&gt;Why Static Methods&lt;/strong&gt; ❓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you know? Collection and Collections.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Collection is an interface and Collections is an utility class containing only static methods which operate on Collection objects.&lt;/p&gt;

&lt;p&gt;Java API developers have followed this pattern of supplying an utility class along with an interface to perform basic operations on such objects. But from Java 8, they have break this pattern by introducing static methods to interfaces.&lt;/p&gt;

&lt;p&gt;With the introduction of static methods to interface, such utility classes will disappear and methods to perform basic operations will be kept as static methods in interface itself.&lt;/p&gt;




&lt;p&gt;🎯 &lt;strong&gt;Interface Vs Abstract Class After Java 8&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the introduction of concrete methods (default and static methods) to interfaces from Java 8, the gap between interface and abstract class has been reduced significantly. Now both can have concrete methods as well as abstract methods. But, still there exist some minute differences between them. In this article, we will try to list down the differences between interface Vs abstract class after Java 8.&lt;/p&gt;

&lt;p&gt;Differences Between Interface And Abstract Class After Java 8 :&lt;br&gt;
🎯 &lt;strong&gt;Fields&lt;/strong&gt;&lt;br&gt;
Interface fields are public, static and final by default. Interfaces still don’t support non-static and non-final variables. Interfaces can only have public, static and final variables. On the other hand, abstract class can have static as well as non-static and final as well as non-final variables. They also support private and protected variables along with public variables.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Methods&lt;/strong&gt;&lt;br&gt;
After Java 8, an interface can have default and static methods along with abstract methods. Interfaces don’t support final methods. But, abstract classes support final as well as non-final methods and static as well as non-static methods along with abstract methods.&lt;/p&gt;

&lt;p&gt;Also note that, only interfaces can have default methods. Abstract classes can’t have default methods.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Constructors&lt;/strong&gt;&lt;br&gt;
Interfaces can’t have constructors. Abstract classes can have any number of constructors.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Member’s Accessibility&lt;/strong&gt;&lt;br&gt;
All members of interfaces are public by default. Interfaces don’t support private and protected members. But, abstract classes support all type of members – private, protected and public members.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Multiple Inheritance&lt;/strong&gt;&lt;br&gt;
A class can extend only one abstract class, but can implement multiple interfaces. Thus, a class can inherit multiple properties from multiple sources only through interfaces, not through abstract classes.&lt;/p&gt;



&lt;p&gt;🎯 &lt;strong&gt;Interface Vs Abstract Class After Java 8 :&lt;/strong&gt;&lt;br&gt;
The below table and program summarizes the similarities and differences between interface and abstract class after Java 8&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pgwdfgYQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/javaconceptoftheday.com/wp-content/uploads/2019/04/InterfaceVsAbstractClassJava8.png%3Fssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pgwdfgYQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/javaconceptoftheday.com/wp-content/uploads/2019/04/InterfaceVsAbstractClassJava8.png%3Fssl%3D1" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface anyInterface
{
    int i = 10;            //By default, interface fields are public, static and final

    void abstractMethod();          //Interface can have abstract method

    default void defaultMethod()
    {
        System.out.println("Interface can have default method");
    }

    static void staticMethod() 
    {
        System.out.println("Interface can have static method");
    }

    //No constructors in an interface

    //No non-static and non-final variables in an interface

    //No private fields and methods in an interface

    //No protected fields and methods in an interface

    //No final methods in an interface
}

abstract class anyAbstractClass
{
    private int a;          //Abstract class can have private field

    protected int b;        //Abstract class can have protected field

    public int c;           //Abstract class can have public field

    static int d;           //Abstract class can have static field

    final int e = 10;       //Abstract class can have final field

    int f;                  //Abstract class can have non-static and non-final field

    public anyAbstractClass() 
    {
        System.out.println("Abstract class can have constructors");
    }

    abstract void abstractmethod();    //Abstract class can have abstract method

    private static void staticMethod() 
    {
        System.out.println("Abstract class can have private and static method");
    }

    public void nonStaticMethod()
    {
        System.out.println("Abstract class can have public and non-static method");
    }

    protected void protectedMethod() 
    {
        System.out.println("Abstract class can have protected method");
    }

    final void finalMethod()
    {
        System.out.println("Abstract class can have final method");
    }

    //No default method in an abstract class
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.oracle.com/java/technologies/java8.html"&gt;Oracle Docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.javatpoint.com/java-8-features"&gt;Other resources&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thank you for reading this Article. 😊&lt;/p&gt;

&lt;p&gt;Please leave a ❤️ if you liked it.&lt;br&gt;
An 🦄 will be great.&lt;/p&gt;

&lt;p&gt;And let me know in the discussions area ,if you have any suggestions for me.&lt;/p&gt;

&lt;p&gt;Have a Good Day! 😃&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some of my other posts:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Java Access Modifiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Generics&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Regex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Streams Api&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>career</category>
      <category>java</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Bit Manipulation Techniques</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Mon, 10 Aug 2020 05:14:32 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/bit-manipulation-hacks-3n88</link>
      <guid>https://dev.to/the_unconventional_coder/bit-manipulation-hacks-3n88</guid>
      <description>&lt;p&gt;&lt;strong&gt;LIKE MYSELF I HAVE SEEN MANY PEOPLE SPECIALLY BEGINNERS STRUGGLING WITH BIT MANIPULATIONS IN THE BEGINNING!&lt;br&gt;
SO  I THOUGHT I WOULD WRITE A POST SO THAT PEOPLE CAN BENEFIT FROM IT!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;THIS IS JUST THE NOTES  I MADE A WHILE BACK AS A LOOKUP NOTES WHENEVER I WAS STUCK AT ANY BIT MANIPULATION QUESTIONS!&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;BIT HACKS&lt;/strong&gt;:
&lt;/h1&gt;

&lt;p&gt;🎯 binary numbers  are 0 indexed&lt;br&gt;
REMEMBER left shifting a number by i multiplies that number with 2^i&lt;br&gt;
and right shifting by i divides it by 2^i&lt;/p&gt;




&lt;p&gt;🎯 N-1 INVERTS EVERY BIT STARTING FROM RIGHTMOST ONE till INDEX ‘0’&lt;br&gt;
IF N=0b00000110&lt;br&gt;
 N-1=0b00000101&lt;/p&gt;




&lt;p&gt;🎯  1&amp;lt;&amp;lt;&lt;i&gt;
left shifts 1 by i positions &lt;br&gt;
1&amp;gt;&amp;gt;i&lt;br&gt;
right shifts 1 by i positions&lt;/i&gt;&lt;/p&gt;




&lt;p&gt;🎯 &lt;strong&gt;whenever we want to toggle ,set,unset ith bit of a number we always use 1 as our helper with different operators&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🎯 toggle ith bit:toggling means 1-&amp;gt;0 and 0-&amp;gt;1&lt;br&gt;
1ST STEP: left shift 1 to the position where we want to toggle&lt;br&gt;
2ND STEP: we have taken the 1 to the ith bit(remember all rest are 0s) then we need to make it a 1 if its a zero and make it 0 if its a one&lt;br&gt;
3RD STEP: so we have the 1 fixed ,using this we need to make 0-&amp;gt;1 or 1-&amp;gt;0&lt;br&gt;
if we do '&amp;amp;'&lt;br&gt;
0&amp;amp;1=0(incorrect)&lt;br&gt;
1&amp;amp;1=1(incorrect)&lt;/p&gt;

&lt;p&gt;'|'&lt;br&gt;
0|1=1(correct)&lt;br&gt;
1|1=1(incorrect)&lt;/p&gt;

&lt;p&gt;'^'&lt;br&gt;
0^1=1(correct)&lt;br&gt;
1^1=0(correct)&lt;/p&gt;

&lt;p&gt;hence we could only do xor(^)&lt;/p&gt;




&lt;p&gt;🎯 set ith bit(means make the ith bit 0-&amp;gt;1)&lt;/p&gt;

&lt;p&gt;we again use 1&amp;lt;&amp;lt;i to reach the ith position&lt;br&gt;
then we do '|'  with  1&amp;lt;&amp;lt;i&lt;br&gt;
therefore if bit was 0 it becomes 1&lt;br&gt;
if it was already 1 then it still remains 1&lt;br&gt;
&lt;strong&gt;NOTE-USING XOR IS NOT RECOMMENDED ,BECAUSE IF THE ith BIT IS ALREADY SET THEN XOR WILL GIVE WRONG RESULT!&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;🎯 unset/clear ith bit (make 1-&amp;gt;0)&lt;/p&gt;

&lt;p&gt;we need again the 1&amp;lt;&lt;i&gt;
now we do a negation ~ to this 1 we took so that the 1 in our 1 initially becomes 0 and every other bit becomes 1&lt;br&gt;
suppose i=3&lt;br&gt;
we do 1&amp;lt;&amp;lt;3 to get &lt;br&gt;
 0b00000001-&amp;gt;0b00001000&lt;br&gt;
 then ~ gives&lt;br&gt;
 0b00001000-&amp;gt;0b11110111&lt;br&gt;
 so we have ith bit if our 1 as 0 and rest 1&lt;br&gt;
 now we just &amp;amp; it with the number whose ith bit is to be unset!&lt;/i&gt;&lt;/p&gt;




&lt;p&gt;🎯 Checking if bit at nth position is set or unset:&lt;/p&gt;

&lt;p&gt;Left shift ‘1’ to given position and then ‘AND'(‘&amp;amp;’).&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;em&gt;Some more quick hacks:&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;🎯 &lt;strong&gt;Inverting every bit of a number/1’s complement:&lt;/strong&gt;&lt;br&gt;
If we want to invert every bit of a number i.e change bit ‘0’ to ‘1’ and bit ‘1’ to ‘0’.We can do this with the help of ‘~’ operator. For example : if number is num=00101100 (binary representation) so ‘~num’ will be ‘11010011’.&lt;/p&gt;

&lt;p&gt;This is also the ‘1s complement of number’.&lt;/p&gt;




&lt;p&gt;🎯 Two’s complement of the number: 2’s complement of a number is 1’s complement + 1.&lt;br&gt;
So formally we can have 2’s complement by finding 1s complement and adding 1 to the result i.e (~num+1)&lt;/p&gt;




&lt;p&gt;🎯 *&lt;em&gt;Stripping off the lowest set bit *&lt;/em&gt;:&lt;br&gt;
In many situations we want to strip off the lowest set bit for example in Binary Indexed tree data structure, counting number of set bit in a number.&lt;/p&gt;

&lt;p&gt;We do like this:&lt;/p&gt;

&lt;p&gt;X = X &amp;amp; (X-1)&lt;/p&gt;

&lt;p&gt;Let us see this by taking an example, let X = 1100.&lt;/p&gt;

&lt;p&gt;(X-1)  inverts all the bits till it encounter lowest set ‘1’ and it also invert that lowest set ‘1’.&lt;/p&gt;

&lt;p&gt;X-1 becomes 1011. After ‘ANDing’ X with X-1 we get lowest set bit stripped.&lt;/p&gt;




&lt;p&gt;🎯 &lt;strong&gt;Getting lowest set bit of a number:&lt;/strong&gt;&lt;br&gt;
This is done by using expression ‘X &amp;amp;(-X)’Let us see this by taking an example:Let X = 00101100. &lt;br&gt;
So ~X(1’s complement) will be ‘11010011’ and 2’s complement will be (~X+1 or -X) i.e  ‘11010100’.&lt;br&gt;
So if we ‘AND’ original number ‘X’ with its two’s complement which is ‘-X’, we get lowest set bit.&lt;/p&gt;




&lt;h1&gt;
  
  
  🎯  SOME MORE IMPORTANT HACKS:
&lt;/h1&gt;

&lt;p&gt;x&amp;amp;1 gives the lowest bit(helps in finding whether number is even or odd i.e if last bit is 0 then it is even otherwise odd)&lt;br&gt;
x &amp;amp; (x-1) will clear the lowest set bit of x&lt;br&gt;
x &amp;amp; ~(x-1) extracts the lowest set bit of x (all others are clear). Pretty patterns when applied to a linear sequence.&lt;br&gt;
x &amp;amp; (x + (1 0&amp;lt;&amp;lt; n)) = x, with the run of set bits (possibly length 0) starting at bit n cleared.&lt;br&gt;
x &amp;amp; ~(x + (1 &amp;lt;&amp;lt; n)) = the run of set bits (possibly length 0) in x, starting at bit n.&lt;br&gt;
x | (x + 1) = x with the lowest cleared bit set.&lt;br&gt;
x | ~(x + 1) = extracts the lowest cleared bit of x (all others are set).&lt;br&gt;
x | (x - (1 &amp;lt;&amp;lt; n)) = x, with the run of cleared bits (possibly length 0) starting at bit n set.&lt;br&gt;
x | ~(x - (1 &amp;lt;&amp;lt; n)) = the lowest run of cleared bits (possibly length 0) in x, starting at bit n are the only clear bits.&lt;/p&gt;




&lt;p&gt;HOPE IT HELPS! &lt;/p&gt;

&lt;p&gt;Please leave a ❤️ if you liked this article.&lt;br&gt;
A 🦄 would be great.&lt;br&gt;
And let me know in the discussions panel if you have any suggestions for me.&lt;/p&gt;

&lt;p&gt;Have a Good Day! 😃&lt;/p&gt;

&lt;p&gt;Some of my other posts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Java Access Modifiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Generics&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Regex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Streams Api&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>career</category>
      <category>java</category>
    </item>
    <item>
      <title>Let's talk about STREAMS !!</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Sat, 08 Aug 2020 09:40:02 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf</link>
      <guid>https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGUCOvRp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGUCOvRp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif" alt="wave"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Hey there!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;In this article I will be talking about Streams in Java and how they help in writing neat and compact production codes.&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;But before diving into Streams let us talk  a little about &lt;strong&gt;Functional Programming&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We as Java developers are constantly grilled about Java's verbose nature and how to even print a single word we have to write about 5-8 lines of code. 😭&lt;/p&gt;

&lt;p&gt;Well this was the scenario before JAVA 8 came into the picture.&lt;br&gt;
With the inclusion of Functional Programming the JAVA code's verbosity can be reduced to around 70%. 😮&lt;/p&gt;

&lt;p&gt;Coming back to my point lets see what is Functional Programming.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎯 What is Functional Programming ❓
&lt;/h2&gt;

&lt;p&gt;Functional programming (also called FP) is a way of thinking about software construction by creating pure functions. It avoid concepts of shared state, mutable data observed in Object Oriented Programming.&lt;/p&gt;

&lt;p&gt;Functional languages emphasizes on expressions and declarations rather than execution of statements. Therefore, unlike other procedures which depend on a local or global state, value output in FP depends only on the arguments passed to the function.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎯 Characteristics of Functional Programming:
&lt;/h2&gt;

&lt;p&gt;Functional programming method focuses on results, not the process&lt;br&gt;
Emphasis is on what is to be computed&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is immutable&lt;/li&gt;
&lt;li&gt;Functional programming Decompose the problem into 'functions&lt;/li&gt;
&lt;li&gt;It is built on the concept of mathematical functions which uses conditional expressions and recursion to do perform the calculation&lt;/li&gt;
&lt;li&gt;It does not support iteration like loop statements and conditional statements like If-Else&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🎯  The benefits of functional programming:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allows you to avoid confusing problems and errors in the code&lt;/li&gt;
&lt;li&gt;Easier to test and execute Unit testing and debug FP Code.&lt;/li&gt;
&lt;li&gt;Parallel processing and concurrency&lt;/li&gt;
&lt;li&gt;Hot code deployment and fault tolerance&lt;/li&gt;
&lt;li&gt;Offers better modularity with a shorter code&lt;/li&gt;
&lt;li&gt;Increased productivity of the developer&lt;/li&gt;
&lt;li&gt;Supports Nested Functions&lt;/li&gt;
&lt;li&gt;Functional Constructs like Lazy Map &amp;amp; Lists, etc.&lt;/li&gt;
&lt;li&gt;Allows effective use of Lambda Calculus.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So we have a basic idea of Functional Programming now!&lt;br&gt;
Lets see how this is implemented in  JAVA Streams &lt;/p&gt;

&lt;p&gt;Simply put, streams are &lt;strong&gt;wrappers&lt;/strong&gt; around a data source, allowing us to operate with that data source and making bulk processing convenient and fast.&lt;/p&gt;

&lt;p&gt;A stream does not store data and, in that sense, is not a data structure. It also never modifies the underlying data source.&lt;/p&gt;

&lt;p&gt;This functionality – java.util.stream – supports functional-style operations on streams of elements, such as map-reduce transformations on collections.&lt;/p&gt;



&lt;p&gt;✅ Before beginning with Streams lets note down some important concepts :&lt;/p&gt;

&lt;p&gt;1.Stream is a flow of data derived from a collection&lt;br&gt;
2.Stream can create a pipeline  of function that can be evaluated&lt;br&gt;
3.Data in Stream is Lazy Evaluated&lt;br&gt;
4.Stream can transform data but cannot mutate it.&lt;/p&gt;



&lt;p&gt;🎯 [NOTE] -  Stream is not a Data Structure.Also the data structure on which you are creating the  stream is not changed at all.The Stream just (kinda) makes a copy of it and performs some actions on its own copy.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Well that's all fine but how to create a Stream&lt;/strong&gt; ? 😕&lt;/p&gt;
&lt;h2&gt;
  
  
  🎯 Stream Creation:
&lt;/h2&gt;

&lt;p&gt;✔️ Let’s first obtain a stream from an existing array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private static Dev[] arrayOfDevs = {
    new Dev(1, "Steve Rogers", 100000.0), 
    new Dev(2, "Anthony Stark", 200000.0), 
    new Dev(3, "Bruce Wayne", 300000.0)
};

Stream.of(arrayOfDevs);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;✔️ We can also obtain a stream from an existing list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private static List&amp;lt;Dev&amp;gt; devList = Arrays.asList(arrayOfDevs);
devList.stream();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;And we can create a stream from individual objects using Stream.of():
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stream.of(arrayOfDevs[0], arrayOfDevs[1], arrayOfDevs[2]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;✔️ Or simply using Stream.builder():&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stream.Builder&amp;lt;Dev&amp;gt; devStreamBuilder = Stream.builder();

devStreamBuilder.accept(arrayOfDev[0]);
devStreamBuilder.accept(arrayOfDev[1]);
devStreamBuilder.accept(arrayOfDev[2]);

Stream&amp;lt;Dev&amp;gt; devStream = devStreamBuilder.build();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Ok so now we know how to create a Stream.  😎&lt;br&gt;
But whats the use of a Stream if we cant play around with it. &lt;/p&gt;


&lt;h2&gt;
  
  
  🎯 Stream Operations:
&lt;/h2&gt;

&lt;p&gt;Let’s now see some common usages and operations we can perform on and with the help of the stream support in the language.&lt;/p&gt;

&lt;p&gt;✔️ forEach:&lt;/p&gt;

&lt;p&gt;forEach() is simplest and most common operation; it loops over the stream elements, calling the supplied function on each element.&lt;/p&gt;

&lt;p&gt;The method is so common that is has been introduced directly in Iterable, Map etc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Test
public void whenIncrementSalaryForEachDev_thenApplyNewSalary() {    
    devList.stream().forEach(d -&amp;gt; d.salaryIncrement(10.0));

    assertThat(devList, contains(
      hasProperty("salary", equalTo(110000.0)),
      hasProperty("salary", equalTo(220000.0)),
      hasProperty("salary", equalTo(330000.0))
    ));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will effectively call the salaryIncrement() on each element in the devList.&lt;/p&gt;

&lt;p&gt;forEach() is a terminal operation, which means that, after the operation is performed, the stream pipeline is considered consumed, and can no longer be used.&lt;/p&gt;




&lt;p&gt;✔️ map&lt;/p&gt;

&lt;p&gt;map() produces a new stream after applying a function to each element of the original stream. The new stream could be of different type.&lt;/p&gt;

&lt;p&gt;The following example converts the stream of Integers into the stream of Devs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
@Test
public void whenMapIdToDevs_thenGetDevStream() {
    Integer[] devIds = { 1, 2, 3 };

    List&amp;lt;Dev&amp;gt; devs = Stream.of(devIds)
      .map(devRepository::findById)
      .collect(Collectors.toList());

    assertEquals(devs.size(), devIds.length);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we obtain an Integer stream of dev ids from an array. Each Integer is passed to the function devRepository::findById() – which returns the corresponding Dev object; this effectively forms an Dev stream.&lt;/p&gt;




&lt;p&gt;✔️  collect&lt;br&gt;
We saw how collect() works in the previous example; its one of the common ways to get stuff out of the stream once we are done with all the processing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Test
public void whenCollectStreamToList_thenGetList() {
    List&amp;lt;Dev&amp;gt; devs = devList.stream().collect(Collectors.toList());

    assertEquals(devList, devs);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;collect() performs mutable fold operations (repackaging elements to some data structures and applying some additional logic, concatenating them, etc.) on data elements held in the Stream instance.&lt;/p&gt;

&lt;p&gt;The strategy for this operation is provided via the Collector interface implementation. In the example above, we used the toList collector to collect all Stream elements into a List instance.&lt;/p&gt;




&lt;p&gt;✔️ filter&lt;/p&gt;

&lt;p&gt;Next, let’s have a look at filter(); this produces a new stream that contains elements of the original stream that pass a given test (specified by a Predicate).&lt;/p&gt;

&lt;p&gt;Let’s have a look at how that works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Test
public void whenFilterDevs_thenGetFilteredStream() {
    Integer[] devIds = { 1, 2, 3, 4 };

    List&amp;lt;Dev&amp;gt; devs = Stream.of(devIds)
      .map(devRepository::findById)
      .filter(e -&amp;gt; e != null)
      .filter(e -&amp;gt; e.getSalary() &amp;gt; 200000)
      .collect(Collectors.toList());

    assertEquals(Arrays.asList(arrayOfDevs[2]), devs);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the example above, we first filter out null references for invalid dev ids and then again apply a filter to only keep devs with salaries over a certain threshold.&lt;/p&gt;




&lt;p&gt;✔️ toArray&lt;br&gt;
We saw how we used collect() to get data out of the stream. If we need to get an array out of the stream, we can simply use toArray():&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Test
public void whenStreamToArray_thenGetArray() {
    Dev[] devs = devList.stream().toArray(Dev[]::new);

    assertThat(devList.toArray(), equalTo(devs));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The syntax Dev[]::new creates an empty array of Devs – which is then filled with elements from the stream.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 [NOTE]
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Lazy Evaluation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most important characteristics of streams is that they allow for significant optimizations through lazy evaluations.&lt;/p&gt;

&lt;p&gt;Computation on the source data is only performed when the terminal operation is initiated, and source elements are consumed only as needed.&lt;/p&gt;

&lt;p&gt;All intermediate operations are lazy, so they’re not executed until a result of a processing is actually needed.&lt;/p&gt;

&lt;p&gt;For example, consider the findFirst() example we saw earlier. How many times is the map() operation performed here? 4 times, since the input array contains 4 elements?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Test
public void whenFindFirst_thenGetFirstDevInStream() {
    Integer[] devIds = { 1, 2, 3, 4 };

    Dev devs= Stream.of(devIds)
      .map(devRepository::findById)
      .filter(e -&amp;gt; e != null)
      .filter(e -&amp;gt; e.getSalary() &amp;gt; 100000)
      .findFirst()
      .orElse(null);

    assertEquals(devs.getSalary(), new Double(200000));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stream performs the map and two filter operations, one element at a time.&lt;/p&gt;

&lt;p&gt;It first performs all the operations on id 1. Since the salary of id 1 is not greater than 100000, the processing moves on to the next element.&lt;/p&gt;

&lt;p&gt;Id 2 satisfies both of the filter predicates and hence the stream evaluates the terminal operation findFirst() and returns the result.&lt;/p&gt;

&lt;p&gt;No operations are performed on id 3 and 4.&lt;/p&gt;

&lt;p&gt;Processing streams lazily allows avoiding examining all the data when that’s not necessary. This behavior becomes even more important when the input stream is infinite and not just very large.&lt;/p&gt;




&lt;p&gt;Java Streams Api is a very large topic and i have tried  my best to fit as much as possible in this post.&lt;br&gt;
Please refer to the below links for more in depth knowledge.&lt;/p&gt;

&lt;p&gt;👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/stream-in-java/#:~:text=A%20stream%20is%20a%20sequence,Arrays%20or%20I%2FO%20channels."&gt;Link for reference-1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html"&gt;Oracle docs &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.baeldung.com/java-8-streams"&gt;Baeldung link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV_3vurg"&gt;Devoxx Youtube&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Some of my other posts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Java Access Modifiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Generics&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Regex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Streams Api&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Please leave a ❤️ if you liked this article.&lt;br&gt;
A 🦄 would be great.&lt;br&gt;
And let me know in the discussions panel if you have any suggestions for me.&lt;br&gt;
And do leave a link to any resource  on Java Streams Api that you know  of ,that can help others   and  i will  add it  to the post.&lt;/p&gt;

&lt;p&gt;Have a Good Day! 😃&lt;/p&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>career</category>
    </item>
    <item>
      <title>Opinion Needed !</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Wed, 05 Aug 2020 20:25:24 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/opinion-needed-3gk3</link>
      <guid>https://dev.to/the_unconventional_coder/opinion-needed-3gk3</guid>
      <description>&lt;h2&gt;
  
  
  With Google really pushing Kotlin with free courses and all, is Android App development really taking a new route from Java to Kotlin ?
&lt;/h2&gt;

&lt;p&gt;As an novice-Android App dev , should  i  switch to Kotlin or stick with Java ?&lt;/p&gt;

&lt;p&gt;Lets carry on this discussion .&lt;br&gt;
Post your views and opinions in the discussions panel below.&lt;br&gt;
Thank You in advance !&lt;/p&gt;

</description>
      <category>java</category>
      <category>kotlin</category>
      <category>android</category>
      <category>help</category>
    </item>
    <item>
      <title>Let's Talk About REGEX !!</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Wed, 05 Aug 2020 12:00:27 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd</link>
      <guid>https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd</guid>
      <description>&lt;h2&gt;
  
  
  I think most of us would agree that :
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"Regex"&lt;/strong&gt; is one of those concepts in computer science that no matter how many times you practice , you may have to go back to your notes or google about it. 😟&lt;/p&gt;




&lt;h2&gt;
  
  
  What are regex/regular expressions ❓ 😕
&lt;/h2&gt;

&lt;p&gt;A regular expression defines a search pattern for strings. The abbreviation for regular expression is regex. The search pattern can be anything from a simple character, a fixed string or a complex expression containing special characters describing the pattern. The pattern defined by the regex may match one or several times or not at all for a given string.&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 Common matching symbols:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regular Expression&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;.&lt;/td&gt;
&lt;td&gt;matches any character&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;^regex&lt;/td&gt;
&lt;td&gt;Finds regex that must match at the beginning of the line.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;regex$&lt;/td&gt;
&lt;td&gt;Finds regex that must match at the end of the line.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[abc]&lt;/td&gt;
&lt;td&gt;Set definition, can match the letter a or b or c.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[abc][vz]&lt;/td&gt;
&lt;td&gt;Set definition, can match a or b or c followed by either v or z.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[^abc]&lt;/td&gt;
&lt;td&gt;When a caret appears as the first character inside square brackets, it negates the pattern. This pattern matches any character except a or b or c.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[a-d1-7]&lt;/td&gt;
&lt;td&gt;Ranges: matches a letter between a and d and figures from 1 to 7, but not d1.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XZ&lt;/td&gt;
&lt;td&gt;Finds X directly followed by Z.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;Checks if a line end follows.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💥 Meta characters:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regular Expression&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;\d&lt;/td&gt;
&lt;td&gt;Any digit, short for [0-9]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\D&lt;/td&gt;
&lt;td&gt;A non-digit, short for [^0-9]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\s&lt;/td&gt;
&lt;td&gt;A whitespace character, short for [ \t\n\x0b\r\f]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\S&lt;/td&gt;
&lt;td&gt;A non-whitespace character&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;A word character, short for [a-zA-Z_0-9]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;A non-word character [^\w]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\S+&lt;/td&gt;
&lt;td&gt;Several non-whitespace characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;Matches a word boundary where a word character is [a-zA-Z0-9_]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🎯 &lt;strong&gt;[NOTE]:&lt;/strong&gt; These meta characters have the same first letter as their representation, e.g., digit, space, word, and boundary. Uppercase symbols define the opposite.&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 Quantifier:
&lt;/h2&gt;

&lt;p&gt;A quantifier defines how often an element can occur. The symbols ?, *, + and {} are qualifiers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regular Expression&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;Occurs zero or more times, is short for {0,}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;Occurs one or more times, is short for {1,}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;Occurs no or one times, ? is short for {0,1}.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{X}&lt;/td&gt;
&lt;td&gt;Occurs X number of times, {} describes the order of the preceding liberal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{X,Y}&lt;/td&gt;
&lt;td&gt;Occurs between X and Y times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*?&lt;/td&gt;
&lt;td&gt;? after a quantifier makes it a reluctant quantifier. It tries to find the smallest match. This makes the regular expression stop at the first match.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;🎯 &lt;strong&gt;[NOTE]&lt;/strong&gt; - The backslash  \ is an escape character in Java Strings. That means backslash has a predefined meaning in Java. You have to use double backslash \ to define a single backslash. If you want to define \w, then you must be using \w in your regex. If you want to use backslash as a literal, you have to type \\ as \ is also an escape character in regular expressions.&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 Redefined methods on String for processing regular expressions.
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regular Expression&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;s.matches("regex")&lt;/td&gt;
&lt;td&gt;Evaluates if "regex" matches s. Returns only true if the WHOLE string can be matched.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s.split("regex")&lt;/td&gt;
&lt;td&gt;Creates an array with substrings of s divided at occurrence of "regex". "regex" is not included in the result.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s.replaceFirst("regex"), "replacement"&lt;/td&gt;
&lt;td&gt;Replaces first occurance of "regex" with "replacement.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s.replaceAll("regex"), "replacement"&lt;/td&gt;
&lt;td&gt;Replaces all occurances of "regex" with "replacement.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;a href="https://www.hackerrank.com/domains/regex"&gt;Practice your Regex Skills here&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.jrebel.com/blog/java-regular-expressions-cheat-sheet"&gt;Cheatsheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some resources gathered from the discussions panel:&lt;br&gt;
&lt;a href="https://regex101.com/"&gt;regex101&lt;/a&gt;&lt;br&gt;
&lt;a href="https://regexr.com/"&gt;regexr&lt;/a&gt;&lt;br&gt;
&lt;a href="https://ihateregex.io/"&gt;ihateregex.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you &lt;a href="https://dev.to/madza"&gt;Madza&lt;/a&gt; , &lt;a href="https://dev.to/jakeerc"&gt;Jakeer&lt;/a&gt; for the links.&lt;/p&gt;




&lt;p&gt;Some of my other posts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Java Access Modifiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Generics&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Regex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Streams Api&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Please leave a ❤️ if you liked this post!&lt;br&gt;
A 🦄 would be great!&lt;/p&gt;

&lt;p&gt;And feel free to  let me know  in the discussions if you think i missed something.&lt;/p&gt;

&lt;p&gt;HAVE A GOOD DAY!&lt;/p&gt;

</description>
      <category>career</category>
      <category>java</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CASE STYLES IN PROGRAMMING !</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Wed, 29 Jul 2020 16:31:50 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/case-styles-in-programming-5498</link>
      <guid>https://dev.to/the_unconventional_coder/case-styles-in-programming-5498</guid>
      <description>&lt;p&gt;&lt;em&gt;have you ever came across words like camel case ,snake case and wondered what actually they mean?&lt;/em&gt; 😕 &lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;em&gt;In this Article I will be elaborating about the different case styles available in computer programming.&lt;/em&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;The most popular ways to combine words into a single string&lt;/em&gt;:
&lt;/h2&gt;




&lt;ul&gt;
&lt;li&gt; 🐫 &lt;strong&gt;camelCase&lt;/strong&gt;: Camel case combines words by capitalizing all words following the first word and removing the space, as follows:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Raw&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the unconventional coder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Camel Case&lt;/strong&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;theUnconventionalCoder&lt;br&gt;
  ----👆--------------👆&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use&lt;/strong&gt;: Mainly in variable declaration.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pascal Case&lt;/strong&gt; : Pascal case combines words by capitalizing all words (even the first word) and removing the space, as follows:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Raw&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the unconventional coder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Pascal Case&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TheUnconventionalCoder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use&lt;/strong&gt;:  Declaring classes &lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;  🐍 &lt;strong&gt;Snake Case&lt;/strong&gt; : Snake case combines words by replacing each space with an underscore (_) and, in the all caps version, all letters are capitalized, as follows:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Raw&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the unconventional coder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Snake Case&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the_unconventional_coder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use&lt;/strong&gt; : Used for naming constants.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Kebab Case&lt;/strong&gt; :  Kebab case combines words by replacing each space with a dash (-), as follows:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Raw&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the unconventional coder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Kebab Case&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the-unconventional-coder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use&lt;/strong&gt; : Used for naming URL's.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.chaseadams.io/posts/most-common-programming-case-types/#:~:text=The%20most%20common%20case%20types,Kebab%20case"&gt;reference&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please leave a ❤️ if you liked this article!&lt;br&gt;
And feel free to leave any suggestions for me in the discussions panel. &lt;/p&gt;

</description>
      <category>java</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Amortized Time Complexity</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Sat, 25 Jul 2020 11:16:29 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/amortized-time-complexity-j2e</link>
      <guid>https://dev.to/the_unconventional_coder/amortized-time-complexity-j2e</guid>
      <description>&lt;p&gt;In computer science algorithms and data structures , most of the time we consider the &lt;strong&gt;Big-O&lt;/strong&gt; complexity analysis as the benchmark.&lt;br&gt;
But Big-O Analysis is not always the best option.&lt;br&gt;
Here in this article I will discuss , how Amortized Complexity makes much more sense in some cases.&lt;/p&gt;

&lt;p&gt;🎯  &lt;strong&gt;Amortized&lt;/strong&gt; time is the way to express the time complexity when an algorithm has the very &lt;strong&gt;bad time complexity&lt;/strong&gt; only &lt;strong&gt;once&lt;/strong&gt; in a while besides the time complexity that happens most of time. Good example would be an &lt;strong&gt;ArrayList&lt;/strong&gt; which is a data structure that contains an array and can be extended.&lt;/p&gt;




&lt;p&gt;In a normal Array , the size of the array is predefined.&lt;br&gt;
Hence Insertions in Array are O(1) or constant time.&lt;br&gt;
But When we use ArrayList , the size is variable and can increase/decrease depending upon the input.&lt;br&gt;
Every ArrayList has an initial capacity.&lt;br&gt;
Mostly the initial capacity is 10.&lt;/p&gt;

&lt;p&gt;Now , when we want to insert more than 10 elements then three steps need to be performed:&lt;br&gt;
1.Create a new Array of double size(2N)&lt;br&gt;
2.Copy all previous elements(N)&lt;br&gt;
3.Add the new element.&lt;/p&gt;

&lt;p&gt;When ArrayList hits the array capacity in it, then it create a new array with the doubled size of the old array and copy all the items in the old array to the new array. In ArrayList, two time complexities exist; one is O(1) and the other is O(n).&lt;/p&gt;

&lt;p&gt;The first kind  is O(1) as shown below:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F875%2F1%2AxzHn_L51zW7isiYY72cEHw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F875%2F1%2AxzHn_L51zW7isiYY72cEHw.png" alt="constant time step"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second kind is O(N) as show  below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F875%2F1%2Av8uMYv8IWGeeApFzquTvdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F875%2F1%2Av8uMYv8IWGeeApFzquTvdg.png" alt="linear time step"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus in case of Dynamic Array we can say that:&lt;/p&gt;

&lt;h2&gt;
  
  
  The insertion takes O(n) when the capacity has been reached, and the amortized time for each insertion is O(1).
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Final Words:
&lt;/h2&gt;

&lt;p&gt;In Oracle terms (which are implied tacitly) and speaking about List:&lt;/p&gt;

&lt;p&gt;🎯   &lt;strong&gt;add&lt;/strong&gt; method (synonym - "append method") always means boolean add(E)&lt;br&gt;
 🎯   &lt;strong&gt;insert&lt;/strong&gt; method  always means boolean add(int index, E)&lt;/p&gt;

&lt;p&gt;When Oracle writes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The add operation runs in amortized constant time, that is, adding n elements requires O(n) time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;it means:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complexity of a single boolean add(E) operation is amortized O(1).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It cannot be just O(1) asymptotic (always) because rarely we need to grow array capacity. This single add operation which is in fact a "create new bigger array, copy old array into it, and then add one element to the end" operation is O(n) asymptotic complexity, because copying the array when increasing List capacity is O(n), complexity of growing plus adding is O(n) [calculated as O(n) + O(1) = O(n)]. Without this capacity growing operation, add complexity would have been O(1), element is always added (appended) to the end of array (max index). If we "added" (= inserted) not to array end, we would need to move rightmost elements (with bigger indexes), and complexity for single such operation would have been O(n).&lt;/p&gt;

&lt;p&gt;Now, for a single add operation asymptotic complexity is O(1) for add-without-increasing-capacity and O(n) for add-with-increasing-capacity (which happens very rare).&lt;/p&gt;

&lt;p&gt;Amortized complexity of a single add operation is O(1). It reflects the fact that rare O(n) grow-and-add operations get "diluted" with much more numerous O(1) add-without-grow ones, so "on the average" single operation is O(1).&lt;/p&gt;

&lt;p&gt;"Asymptotic complexity" of n add operations is O(n). But here we speak about complexity of n operations, not complexity of one operation. It is not a strict way to put it like this ("Asymptotic complexity"), but anyway. Amortized complexity of n operations is even less sense.&lt;/p&gt;

&lt;p&gt;Finally, boolean add(int index, E) single operation complexity is always O(n). If it triggers grows, it is O(n) + O(n) [grow + insert], but 2*O(n) is same as O(n).&lt;/p&gt;

&lt;p&gt;So , in such cases the Amortized Analysis makes more sense.&lt;/p&gt;

&lt;p&gt;I am providing the below links for reference and better understanding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=MTl8djZFWE0" rel="noopener noreferrer"&gt;Gaurav Sen Theory part&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=EOjoQxdOBgU" rel="noopener noreferrer"&gt;Gaurav Sen Coding part&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=T7W5E-5mljc" rel="noopener noreferrer"&gt;0612 TV w/ NERDfirst&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bigocheatsheet.com/" rel="noopener noreferrer"&gt;Big O Cheat Sheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you liked this post then please leave a heart ❤️&lt;/p&gt;

&lt;p&gt;And if you have any queries or suggestions for me , then please leave them in the discussions panel.&lt;/p&gt;

</description>
      <category>java</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Java Concept of the Day.</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Thu, 23 Jul 2020 11:01:46 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec</link>
      <guid>https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec</guid>
      <description>&lt;h1&gt;
  
  
  Concept for today is &lt;strong&gt;Java Generics&lt;/strong&gt;.
&lt;/h1&gt;

&lt;p&gt;This is a continuation of the series Java Concepts&lt;br&gt;
&lt;a href="https://dev.to/the_unconventional_coder/java-concepts-o8l"&gt;ORIGINAL POST&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now before we begin , let me tell you that Java Generics Concept will be covered in two parts&lt;/p&gt;
&lt;h4&gt;
  
  
  part 1 -Introduction , and basics .
&lt;/h4&gt;
&lt;h4&gt;
  
  
  part 2 -Advanced Generics.
&lt;/h4&gt;
&lt;h1&gt;
  
  
  part 1-Introduction to Generics.
&lt;/h1&gt;

&lt;p&gt;First of all :&lt;/p&gt;
&lt;h2&gt;
  
  
  What are Generics?
&lt;/h2&gt;

&lt;p&gt;well ,as a java programmer , many times you may have noticed the use of &lt;em&gt;angled brackets&lt;/em&gt; &lt;strong&gt;&amp;lt;&amp;gt;&lt;/strong&gt; in java programs mostly in Collections(ArrayList,Set,Map) etc.&lt;/p&gt;

&lt;p&gt;Whenever you see &lt;strong&gt;&amp;lt;&amp;gt;&lt;/strong&gt; , means that generics were used here.&lt;/p&gt;

&lt;p&gt;Generics in Java were introduced in JSE 5.0(2004)&lt;/p&gt;

&lt;p&gt;If you are a Java programmer then type-casting is one of those things which might irritate you the most.&lt;br&gt;
 Well Java Generics  extend Java's type system to allow ‘a type or method to operate on objects of various types while providing compile-time type safety.’&lt;br&gt;
Generics were introduced to reduce the pain of constantly type-casting variables to make them work correctly.&lt;/p&gt;

&lt;p&gt;Lets start with a simple Java Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;

public class container {
    String item1;
    String item2;

    public container(String item1, String item2) {
        this.item1 = item1;
        this.item2 = item2;
    }

    public void print()
    {
        System.out.println("container contains: ");
        System.out.println(item1);
        System.out.println(item2);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this stage,the container class is only able to work with String DataTypes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;
public class app {
    public static void main(String[] args) {
        container container  =new container("java","23");//only string can be passed as a parameter
        container.print();
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What if we wanted to make this class work with any data type(int,double boolean etc).&lt;br&gt;
To do this we can change the String type to Object type(&lt;strong&gt;Because every class is a child class of Object class in Java&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;So we can change the  code as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;

public class container {
    Object item1;
    Object item2;

    public container(Object item1, Object item2) {
        this.item1 = item1;
        this.item2 = item2;
    }

    public void print()
    {
        System.out.println("container contains: ");
        System.out.println(item1);
        System.out.println(item2);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have made this class kind of "generic" i.e we dont have to worry about typecasting our variables to String before passing them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;
public class app {
    public static void main(String[] args) {
        container container  =new container(false,23);
        container.print();
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hence we just passed an int and a boolean value and it worked flawlessly!&lt;/p&gt;

&lt;p&gt;But wait ,there is a problem in this.&lt;/p&gt;

&lt;p&gt;Lets introduce some getters in our container class(Shortcut for this is alt+insert).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;

public class container {
    Object item1;
    Object item2;

    public container(Object item1, Object item2) {
        this.item1 = item1;
        this.item2 = item2;
    }

    public Object getItem1() {
        return item1;
    }

    public Object getItem2() {
        return item2;
    }

    public void print()
    {
        System.out.println("container contains: ");
        System.out.println(item1);
        System.out.println(item2);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now lets try to get item1 and item2 from our app.java class.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;
public class app {
    public static void main(String[] args) {
        container container  =new container(false,23);
        container.print();
        boolean a= container.getItem1(); //compile error
        int b=container.getItem2();//compile error

    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We get a compile error which says : casting required for boolean and  int.&lt;br&gt;
To Solve this we have to again cast them to boolean and int.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;


public class app {
    public static void main(String[] args) {
        container container  =new container(false,23);
        container.print();
        boolean a= (boolean) container.getItem1();//compiled successfully
        int b= (int) container.getItem2();//compiled successfully

    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thus we still had to type cast it because the container class returns an Object whereas we are collecting it in boolean/int variable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember,we boolean/int variable cannot implicitly accept an Object variable ,but the Object variable can accept ant other datatype.&lt;/strong&gt;&lt;br&gt;
errors like this will appear &lt;code&gt;: error: incompatible types:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So our class is not Generic till now.&lt;br&gt;
Lets make it Generic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;

public class container&amp;lt;i1,i2&amp;gt; {
   i1 item1;
    i2 item2;

    public container(i1 item1, i2 item2) {
        this.item1 = item1;
        this.item2 = item2;
    }

    public i1 getItem1() {
        return item1;
    }

    public i2 getItem2() {
        return item2;
    }

    public void print()
    {
        System.out.println("container contains: ");
        System.out.println(item1);
        System.out.println(item2);
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"i1,i2" are user defined(you can use any names).&lt;br&gt;
So,Basically now we have made it possible for container class to accept any kind of object(as the user wants it to be).&lt;/p&gt;

&lt;p&gt;Now lets see the magic!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package generics;

public class app {
    public static void main(String[] args) {

        container&amp;lt;Boolean,Integer&amp;gt; container  =new container&amp;lt;Boolean,Integer&amp;gt;(false,23);
        container.print();
        boolean a= container.getItem1();
        int b=  container.getItem2();

        container&amp;lt;String,Integer&amp;gt; container2  =new container&amp;lt;String,Integer&amp;gt;("java",23);
        container2.print();
        String a2=container2.getItem1();
        int b2=container2.getItem2();
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See, we have made two different object of the same class 'container' but both of them pass &lt;strong&gt;different data types&lt;/strong&gt; to the &lt;strong&gt;same functions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the true use of Java Generics.&lt;br&gt;
for every variable of container we dont have to type cast it to boolean/int.&lt;br&gt;
for every variable of container2 we dont have to type cast it to String/int.&lt;br&gt;
Because the java generics take care of it.&lt;/p&gt;

&lt;p&gt;So that's it for Java Generics Part1.&lt;br&gt;
Hope you have got a basic understanding of how generics work at the basic level.&lt;br&gt;
In part2 we will be going much  deeper into some advanced concepts of Generics.&lt;/p&gt;

&lt;p&gt;If you liked this Article then please leave a heart .&lt;br&gt;
And let me know in the comments if you have any suggestions for me.&lt;/p&gt;

</description>
      <category>java</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Java Concept of the Day.</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Tue, 21 Jul 2020 13:29:09 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim</link>
      <guid>https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim</guid>
      <description>&lt;p&gt;This is the continuation of the post where i will be discussing one core java concept every alternate day.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concepts-o8l"&gt;ORIGINAL POST&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Today's concept-Java Access Modifiers.
&lt;/h3&gt;

&lt;p&gt;Java ,unlike many other OOP language has 4 access modifiers.&lt;br&gt;
&lt;strong&gt;public&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;protected&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;default&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;private&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;public&lt;/em&gt;: The access level of a public modifier is &lt;strong&gt;everywhere&lt;/strong&gt;. It can be accessed from within the class, outside the class, within the package and outside the package.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;protected&lt;/em&gt; : The access level of a protected modifier is within the package and outside the package through child class. If you do not make the child class, it cannot be accessed from outside the package.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;default&lt;/em&gt;: the access level of a default modifier is only within the package. It cannot be accessed from outside the package. If you do not specify any access level, it will be the default.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;private&lt;/em&gt; : The access level of a private modifier is only within the class. It cannot be accessed from outside the class.&lt;/p&gt;

&lt;p&gt;The Access modifiers below are arranged  in decreasing order of visibility:&lt;/p&gt;

&lt;p&gt;public&amp;gt;protected&amp;gt;default&amp;gt;private&lt;/p&gt;

&lt;h2&gt;
  
  
  Access Modifiers on Classes:
&lt;/h2&gt;

&lt;p&gt;For &lt;strong&gt;outer classes&lt;/strong&gt; there is only two choices: public,default&lt;br&gt;
For &lt;strong&gt;inner classes&lt;/strong&gt; there is no restriction,all four can be used.&lt;/p&gt;

&lt;h3&gt;
  
  
  NOTE:each java file can only contain one public class,and the name of that public class has to be same as of the file name.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Access Modifiers on Member Variables and Functions:
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Public data members&lt;/em&gt;:they are accessible for any class in any package.(No security)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Protected data members&lt;/em&gt;:they can be accessed from classes of the same package and also from classes of other packages who inherit them,in other  words, if any class from any other package is a child class then that class can access protected data members  through inheritance.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Default data members&lt;/em&gt;:the other name for default is &lt;strong&gt;package private&lt;/strong&gt;.Thus default  data members  are accessible only from the same package.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Private data members&lt;/em&gt;:Only accessible from the class in which they are declared(Most Secure).&lt;/p&gt;

&lt;h3&gt;
  
  
  NOTE: If we are overriding any method, overridden method (i.e. declared in subclass) must not be more restrictive.
&lt;/h3&gt;

&lt;p&gt;What this means is that while overriding  the accessibility can only be increased (or the same as parent class) ,but cannot be decreased.&lt;/p&gt;

&lt;p&gt;Thus:&lt;br&gt;
 &lt;em&gt;public&lt;/em&gt; cannot be changed to private,default,protected.&lt;br&gt;
&lt;em&gt;protected&lt;/em&gt; cannot be changed to private,default&lt;br&gt;
&lt;em&gt;default&lt;/em&gt; cannot be changed to private&lt;br&gt;
Methods declared private are not inherited at all, so there is no rule for them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html"&gt;oracle java documentation&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Please like this post if it helped you , liking this article will provide motivation for me to deliver even better articles in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank You&lt;/strong&gt; for taking out the time to read this article.&lt;br&gt;
Please comment down any suggestions for me .&lt;br&gt;
And let me know what topic i should cover next.&lt;/p&gt;

</description>
      <category>java</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>JAVA CONCEPTS!</title>
      <dc:creator>ABHINAVA GHOSH (he/him)</dc:creator>
      <pubDate>Mon, 20 Jul 2020 17:46:36 +0000</pubDate>
      <link>https://dev.to/the_unconventional_coder/java-concepts-o8l</link>
      <guid>https://dev.to/the_unconventional_coder/java-concepts-o8l</guid>
      <description>&lt;h1&gt;
  
  
  Plan
&lt;/h1&gt;

&lt;p&gt;Going to start a series on Java Concepts(both programming and core) where in every two days  i will explain (or try to explain) a very fundamental concept of java and readers are encouraged to actively participate in the discussions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goal
&lt;/h2&gt;

&lt;p&gt;The goal of this series will be to brush up the fundamentals of java , which we tend to forget easily.&lt;/p&gt;

&lt;p&gt;For beginners: this will be a very good resource to grasp the fundamental concepts of the language .&lt;/p&gt;

&lt;p&gt;Feel Free to suggest any improvements!&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Java Access Modifiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-1jim"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Generics&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/java-concept-of-the-day-oec"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Regex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-regex-3npd"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Streams Api&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/the_unconventional_coder/lets-talk-about-streams-2bdf"&gt;goto Article&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>career</category>
    </item>
  </channel>
</rss>
