A while ago I wrote a program in Java doing some filtering and displaying without using for while statements and an other one using haskell functional language.
Today, I did the same thing (i.e. no for or while statements), but using lambdaj java library.
There is still a for statement but if you make country as an object and not a string then you can use lambdaj features.
European people: [Eric from France, Martine from France, John from Great-Britain, Martha from Great-Britain, Carine from France, Gerd from Deutschland, Giuseppe from Italia, Martha from Deutschland]
2 Get the different countries:
European countries: [Great-Britain, France, Italia, Deutschland]
3 List the people that belong to each country:
People from: [France]: [Carine from France, Eric from France, Martine from France]
People from: [Deutschland]: [Gerd from Deutschland, Martha from Deutschland]
People from: [Great-Britain]: [John from Great-Britain, Martha from Great-Britain]
People from: [Italia]: [Giuseppe from Italia]
Here is the code:
1 import static ch.lambdaj.Lambda.*; 2 import ch.lambdaj.group.*; 3 import java.util.List; 4 import java.util.Arrays; 5 import java.util.Set; 6 7 8 public class Europeans1 { 9 10 static List<People> l_europeans = Arrays.asList( 11 new People("Eric", "France"), 12 new People("Martine", "France"), 13 new People("John", "Great-Britain"), 14 new People("Martha", "Great-Britain"), 15 new People("Carine", "France"), 16 new People("Gerd", "Deutschland"), 17 new People("Giuseppe", "Italia"), 18 new People("Martha", "Deutschland")); 19 20 public static void main(String[] args) { 21 System.out.println("European people: "+l_europeans); 22 Group<People> g_countries = Groups.group(l_europeans, 23 Groups.by(on(People.class).getNationality())); 24 Set<String> set_countries = g_countries.keySet(); 25 System.out.println("European countries: "+set_countries); 26 for(String s_country:set_countries) { 27 print_inhabitants(s_country); 28 } 29 } 30 31 static void print_inhabitants(String s_country) { 32 System.out.print("People from "+s_country+": "); 33 List<People> l_inhabitants = select(l_europeans, 34 having(on(People.class).getNationality(), 35 org.hamcrest.Matchers.equalTo(s_country))); 36 forEach(l_inhabitants).printFirstName(); 37 System.out.println(""); 38 } 39 }
2 commentaires:
Can the loop in your code be eliminated also using lambdaj?
There is still a for statement but if you make country as an object and not a string then you can use lambdaj features.
get_Nationality() would return a country_object and then we could write:
foreach(set_countries).print_inhabitants();
Enregistrer un commentaire