[Can you help me to get what was wrong with the below program]
Code
List<String> fruitsList= new LinkedList<>(Arrays.asList("mango", "apple", "grapes","MANGO", "APPLE", "GRAPES")); Map<String, List<String>> fruitMap = new HashMap<>(); for (String s : fruitsList) { if (fruitMap.get(s.toLowerCase())==null) { fruitMap.put(s.toLowerCase(), Collections.singletonList(s)); } else { fruitMap.get(s.toLowerCase()).add(s); // got error at this line } } System.out.println(fruitMap);
Expected map: {apple=[apple,APPLE], mango=[mango,MANGO], grapes=[grapes,GRAPES]}]
Advertisement
Answer
Collections.singletonList returns an immutable list and hence you cannot add elements into it. Create a list which is mutable.
Simplifying it,
if (fruitMap.get(s.toLowerCase()) == null) { fruitMap.put(s.toLowerCase(), new LinkedList<>()); } fruitMap.get(s.toLowerCase()).add(s);
Or you can use Map#computeIfAbsent
fruitMap.computeIfAbsent(s.toLowerCase(), k -> new LinkedList<>()).add(s);