原文地址:https://blog.csdn.net/renfufei/article/details/24600507
基本的Lambda循環
// Old looping
for (String player : players) {
System.out.print(player + "; ");
}
System.out.println("");
// Using lambda expression and functional operations
players.forEach((player) -> System.out.print(player + "; "));
System.out.println("");
// Using double colon operator in Java 8
players.forEach(System.out::println);
、
使用Lombda排序集合
// 1.2 使用 lambda expression 排序 players
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2));
Arrays.sort(players, sortByName);
// 1.3 也可以採用如下形式:
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));
原文有更加詳細的翻譯,這裏只是做一個留下一個印象
使用Lambdas和Streams
使用lambdas可以支持許多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。
過濾器
過濾器
System.out.println("下面是月薪超過 $1,400 的PHP程序員:")
phpProgrammers.stream()
.filter((p) -> (p.getSalary() > 1400))
.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
過濾器在處理信息中有很大方便的方面。
// 定義 filters
Predicate<Person> ageFilter = (p) -> (p.getAge() > 25);
Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 1400);
Predicate<Person> genderFilter = (p) -> ("female".equals(p.getGender()));
System.out.println("下面是年齡大於 24歲且月薪在$1,400以上的女PHP程序員:");
phpProgrammers.stream()
.filter(ageFilter)
.filter(salaryFilter)
.filter(genderFilter)
.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
使用limit,限制個數
limit
System.out.println("最前面的3個 Java programmers:");
javaProgrammers.stream()
.limit(3)
.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
System.out.println("最前面的3個女性 Java programmers:")
javaProgrammers.stream()
.filter(genderFilter)
.limit(3)
.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
比排序後選擇第一個/最後一個 更快的是min和max方法:
min 和max
System.out.println("工資最低的 Java programmer:");
Person pers = javaProgrammers
.stream()
.min((p1, p2) -> (p1.getSalary() - p2.getSalary()))
.get()
System.out.printf("Name: %s %s; Salary: $%,d.", pers.getFirstName(), pers.getLastName(), pers.getSalary())
System.out.println("工資最高的 Java programmer:");
Person person = javaProgrammers
.stream()
.max((p, p2) -> (p.getSalary() - p2.getSalary()))
.get()
結合 map 方法,我們可以使用 collect 方法來將我們的結果集放到一個字符串,一個 Set 或一個TreeSet中:(有用)
.map的使用
System.out.println("將 PHP programmers 的 first name 拼接成字符串:");
String phpDevelopers = phpProgrammers
.stream()
.map(Person::getFirstName)
.collect(joining(" ; ")); // 在進一步的操作中可以作爲標記(token)
System.out.println("將 Java programmers 的 first name 存放到 Set:");
Set<String> javaDevFirstName =
javaProgrammers
.stream()
.map(Person::getFirstName)
.collect(toSet());
System.out.println("將 Java programmers 的 first name 存放到 TreeSet:");
TreeSet<String> javaDevLastName = javaProgrammers
.stream()
.map(Person::getLastName)
.collect(toCollection(TreeSet::new));
在Lambda中還可以將幾個結合起來用。