728x90 AdSpace

Monday, 25 September 2017

Java 8 convert List to Map with Duplicate Keys example

In this article we are going to see about how to convert a List with duplicate key into a Map using Java 8 with example program.

StockMarket.java

package com.javatutorialcorner.java8;

public class StockMarket {

 private int id;
 private String equity;
 private String intraDay;
 private String options;
 private String future;

 public StockMarket(int id, String equity, String intraDay, String options,
   String future) {
  this.id = id;
  this.equity = equity;
  this.intraDay = intraDay;
  this.options = options;
  this.future = future;
 }

 public int getId() {
  return id;
 }


 public void setId(int id) {
  this.id = id;
 }
 
 public String getEquity() {
  return equity;
 }

 public void setEquity(String equity) {
  this.equity = equity;
 }

 public String getIntraDay() {
  return intraDay;
 }

 public void setIntraDay(String intraDay) {
  this.intraDay = intraDay;
 }

 public String getOptions() {
  return options;
 }

 public void setOptions(String options) {
  this.options = options;
 }

 public String getFuture() {
  return future;
 }

 public void setFuture(String future) {
  this.future = future;
 }


}

ListToMap.java
package com.javatutorialcorner.java8;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ListToMap {

 public static void main(String[] args) {
   List stockMarket = new ArrayList<>();
   stockMarket.add(new StockMarket(1, "RCOM", "HATHWAY","SBIN","DVISLAB"));
   stockMarket.add(new StockMarket(2, "IOB", "INDBank","Bank Nifty","Nifty 100"));
   stockMarket.add(new StockMarket(3, "RIL", "ICICIBank","Nifty 50","Sensex"));
   stockMarket.add(new StockMarket(4, "IDFC", "HDFC","SBIN","DVISLAB"));
   stockMarket.add(new StockMarket(5, "IOB", "HATHWAY","Nifty 50","Nifty 100"));
  Map resultById = stockMarket.stream().collect(
    Collectors.toMap(StockMarket::getId, StockMarket::getEquity));
  
  System.out.println("Method 1  : ");
  resultById.forEach((k, v) -> {
   System.out.println(k + " : " +v);
  });
  
  // IOB is duplicate key here - it will throw error
  Map resultById1 =  stockMarket.stream().collect(
    Collectors.toMap(StockMarket::getEquity, StockMarket::getId));

  //To solve duplicate key error
  //(oldValue, newValue) -> oldValue) - If the key is duplicated, do you prefer oldKey or newKey?
   resultById1 =  stockMarket.stream().collect(
     Collectors.toMap(StockMarket::getEquity, StockMarket::getId, (oldValue, newValue) -> oldValue));
  
  
 }

}

Output
Method 1  :
1 : RCOM
2 : IOB
3 : RIL
4 : IDFC
5 : IOB
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 2
at java.util.stream.Collectors.lambda$throwingMerger$114(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1245)
at java.util.stream.Collectors.lambda$toMap$172(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.javatutorialcorner.java8.ListToMap.main(ListToMap.java:26)

Annamalai Thangaraj

Annamalai is working as Technical Lead in Leading Telecom company with 5+ years experience in Identity and Access Management , Telecom and Networks, BigData, Java, Spring, Struts, Hibernate, AngularJS, and Enterprise Web Application Development.

Website: Java Tutorials Corner

Shop and help us

Flipkart Offer Snapdeal offer Amazon.in offer Amazon.com offer
  • Blogger Comments
  • Facebook Comments
  • Disqus Comments

0 comments:

Post a Comment

Item Reviewed: Java 8 convert List to Map with Duplicate Keys example Rating: 5 Reviewed By: Annamalai Thangaraj