Java8 Lamdba表达式 002
本篇將講述lamdba表達式的排序,本例包括一個Player對象的集合[稍后定義],通過每一個player的分數高低對列表的player進行排序。類定義001例如以下?
public class SortingPlayer {public static void main(String[] args) {List<Player> playerList = new ArrayList<>();playerList.add(new Player("Black", "White", 9));playerList.add(new Player("John", "Hello", 2));playerList.add(new Player("Machicel", "Jackson", 7));playerList.add(new Player("Ani", "Hessius", 4));playerList.add(new Player("Mark", "Towns", 3));playerList.add(new Player("Huge", "Nana", 6));} }class Player{private String firstName;private String lastName;private int goals;public Player(String firstName, String lastName, int goals) {this.firstName = firstName;this.lastName = lastName;this.goals = goals;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public int getGoals() {return goals;}public void setGoals(int goals) {this.goals = goals;} } 簡單起見把代碼寫在一個類里,Player定義了firstname,lastname,goals,Main方法 創建一個集合并往當中加入了幾個元素。002以下的代碼在加入在001main方法list后
Comparator<Player> byGoals = Comparator.comparing(Player::getGoals); System.out.println("== Sort by Number of Goals =="); playerList.stream().sorted(byGoals).map(p -> p.getFirstName() + " " + p.getLastName() + " - "+ p.getGoals()).forEach(element -> System.out.println(element));使用Player對象的getter方法[依據你想排序的那個字段。本例使用goals]創建一個Comparator - Player::getGoals?。然后使用混合的lamdba表達式和streams,forEach()。展示排序后的集合。
java8中集合排序又新加了能夠極大提高開發效率的3個新特性。
各自是lamdba表達式,方法引用以及stream。對于方法引用和stream這里僅僅做簡介,Stream能夠在集合數據[collections]中使用,它同意集合中的元素進行函數式操作。Stream不存儲數據。它能讓獲得的集合具有很多其它功能。
002中,Comparator依據計算的goals生成,Player::getGoals。然后依據playerList生成stream。stream提供sorted()功能,它接收一個Comparator,Comparator在傳遞給sorted()時已經完畢初始化,然后調用map()功能,map使用一個lamdba表達式拼一個firstname,lastname,&goals的字符串。最后因為List<Player>是可迭代的,它包括forEach()方法,forEach()方法同意集合中的每一個元素應用表達式或狀態組。本例中。每一個元素都在命令行打印,因為map()功能已經在stream中應用,因此最后結果是打印依照goals排好序的每一個元素的firstname,lastname,&goals拼的字符串。例如以下所看到的:
除了使用002所看到的的方法進行排序。我們還能夠使用Collections集合提供的sort()方法:Collections.sort(),見003
System.out.println("== utilize the Collections.sort()method =="); Collections.sort(playerList, (p1,p2) -> p1.getLastName().compareTo(p2.getLastName())); playerList.stream().forEach((p) -> {System.out.println(p.getLastName()); });003中 Collections.sort()第一個參數是要排序的集合本身List<Player>,第二個參數是排序的lamdba實現。本例中傳入兩個參數都是Player對象。比較他們的lastname,因此這個排序將會對集合元素的lastname進行升序排序。排序后生成stream然后forEach使用lamdba表達式打印出排序后集合每一個元素的lastname。例如以下所看到的: == utilize the Collections.sort()method == Hello Hessius Jackson Nana Towns White無疑。lamdba表達式極大的降低了集合排序所需的代碼。并且使代碼更易讀。本篇說到這兒。很多其它特性。下回分解。 ps:本文演示樣例引自 Josh Juneau所著 Java 8 Recipes, 2nd Edition
mission completed!
O(∩_∩)O~
總結
以上是生活随笔為你收集整理的Java8 Lamdba表达式 002的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地市级地铁数据管理信息系统解决方式
- 下一篇: Python学习笔记-DNS处理模块dn