Issue
Suppose I have a list of Map such as: (Using json format just for demonstration)
List<Map> myList = [
{
"id": 12,
"name": "Harie"
},
{
"id": "Forty",
"location": "Earth"
},
{
"name": "Potah"
},
{
"id": "0"
}
]
Now I want all the "id" values in a single String object, separated by a separator. For example, the above map should give me:
"12#Forty#0"
Note: The order in which they are indexed in the list has to be maintained. I know I can do it like this:
StringBuilder result = new StringBuilder();
for (Map map : myList) {
if (map.get("id") instanceof String) {
if(result.length()>0){
result.append('#');
}
result.append(map.get("id"));
}
}
//Use result.toString() for output
But I want a more readable and simplified code, preferably using Java stream api.
Solution
You can use stream and join all the key id
values which are not null
String keyString = myList.stream()
.map(map->map.get("id"))
.filter(Objects::nonNull)
.map(Object::toString)
.collect(Collectors.joining("#"));
In case if you want to check if the value is String
instance you can filter
filter(val-> val!=null && val instance String)
Answered By - Deadpool
Answer Checked By - Robin (JavaFixing Admin)