Java Stream partition, map and join via Collectors
import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Language[] langArray = { // new Language("CSS", 55555,"Client"), // new Language("HTML", 66666,"Client"), // new Language("Java", 44444.5,"Server"), // new Language("Javascript", 77777.77,"Client"), // new Language("C++", 88888,"Server"), // new Language("C", 33333,"Server"), // new Language("SQL", 99999.4,"Server") };// List<Language> langList = Arrays.asList(langArray); langList.stream().forEach(System.out::println); // w ww .j a v a2 s .c om Map<Boolean,String> partionedByMaleGender = langList .stream() .collect(Collectors.partitioningBy(Language::isClient, Collectors.mapping(Language::getFirstName, Collectors.joining(", ")))); System.out.println(partionedByMaleGender); } } class Language { private String firstName; private double salary; private String type; public Language(String firstName, double salary, String t) { this.firstName = firstName; this.salary = salary; this.type = t; } public boolean isClient() { return "Client".contentEquals(this.type); } public String getType() { return this.type; } public String getFirstName() { return firstName; } public double getSalary() { return salary; } // return a String containing the Language's information @Override public String toString() { return String.format("%-20s %8.2f", getFirstName(), getSalary()); } }