I am trying to convert below code into stream. It's not that difficult but I am not sure how to handle null values in stream. I did checked out Optinal.ofNullable
method but quite not sure if I have to use it 2-3 times to get the correct stream code. I can use the below code for now, but I wish to learn doing it in stream. Please help me learn.
Map<String, Map<String, List<String>>> fileTypeMapping = new HashMap<>();
Map<String, List<String>> map = new HashMap<>();
map.put("codec", new ArrayList(Arrays.asList("ext1", "ext2")));
fileTypeMapping.put("image", map);
String fileType = "Image";
String codec = "Codec";
String extension = "ext2";
boolean exist = false;
if(fileType != null) {
Map<String, List<String>> codecMap = fileTypeMapping.get(fileType.toLowerCase());
if(codecMap != null) {
List<String> list = codecMap.get(codec.toLowerCase());
if (list != null) {
exist = list.contains(extension.toLowerCase());
}
}
}
System.out.print(exist);
CodePudding user response:
Seems not related to Stream API, just use Map.getOrDefault
to get rid of null return.
import java.util.*;
public class NullableMapGet {
public static void main(String[] args) {
Map<String, Map<String, List<String>>> fileTypeMapping = new HashMap<>();
Map<String, List<String>> map = new HashMap<>();
map.put("codec", new ArrayList(Arrays.asList("ext1", "ext2")));
fileTypeMapping.put("image", map);
String fileType = "Image";
String codec = "Codec";
String extension = "ext2";
boolean exist = false;
if (fileType == null || codec == null || extension == null) {
exist = false;
} else {
exist = fileTypeMapping
.getOrDefault(fileType.toLowerCase(), Collections.emptyMap())
.getOrDefault(codec.toLowerCase(), Collections.emptyList())
.contains(extension.toLowerCase());
}
System.out.print(exist);
}
}