Java8 Lamdba表达式 002
本篇將講述lamdba表達(dá)式的排序,本例包括一個(gè)Player對(duì)象的集合[稍后定義],通過每一個(gè)player的分?jǐn)?shù)高低對(duì)列表的player進(jìn)行排序。類定義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;} } 簡(jiǎn)單起見把代碼寫在一個(gè)類里,Player定義了firstname,lastname,goals,Main方法 創(chuàng)建一個(gè)集合并往當(dāng)中加入了幾個(gè)元素。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對(duì)象的getter方法[依據(jù)你想排序的那個(gè)字段。本例使用goals]創(chuàng)建一個(gè)Comparator - Player::getGoals?。然后使用混合的lamdba表達(dá)式和streams,forEach()。展示排序后的集合。
java8中集合排序又新加了能夠極大提高開發(fā)效率的3個(gè)新特性。
各自是lamdba表達(dá)式,方法引用以及stream。對(duì)于方法引用和stream這里僅僅做簡(jiǎn)介,Stream能夠在集合數(shù)據(jù)[collections]中使用,它同意集合中的元素進(jìn)行函數(shù)式操作。Stream不存儲(chǔ)數(shù)據(jù)。它能讓獲得的集合具有很多其它功能。
002中,Comparator依據(jù)計(jì)算的goals生成,Player::getGoals。然后依據(jù)playerList生成stream。stream提供sorted()功能,它接收一個(gè)Comparator,Comparator在傳遞給sorted()時(shí)已經(jīng)完畢初始化,然后調(diào)用map()功能,map使用一個(gè)lamdba表達(dá)式拼一個(gè)firstname,lastname,&goals的字符串。最后因?yàn)長(zhǎng)ist<Player>是可迭代的,它包括forEach()方法,forEach()方法同意集合中的每一個(gè)元素應(yīng)用表達(dá)式或狀態(tài)組。本例中。每一個(gè)元素都在命令行打印,因?yàn)閙ap()功能已經(jīng)在stream中應(yīng)用,因此最后結(jié)果是打印依照goals排好序的每一個(gè)元素的firstname,lastname,&goals拼的字符串。例如以下所看到的:
除了使用002所看到的的方法進(jìn)行排序。我們還能夠使用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()第一個(gè)參數(shù)是要排序的集合本身List<Player>,第二個(gè)參數(shù)是排序的lamdba實(shí)現(xiàn)。本例中傳入兩個(gè)參數(shù)都是Player對(duì)象。比較他們的lastname,因此這個(gè)排序?qū)?huì)對(duì)集合元素的lastname進(jìn)行升序排序。排序后生成stream然后forEach使用lamdba表達(dá)式打印出排序后集合每一個(gè)元素的lastname。例如以下所看到的: == utilize the Collections.sort()method == Hello Hessius Jackson Nana Towns White無疑。lamdba表達(dá)式極大的降低了集合排序所需的代碼。并且使代碼更易讀。本篇說到這兒。很多其它特性。下回分解。 ps:本文演示樣例引自 Josh Juneau所著 Java 8 Recipes, 2nd Edition
mission completed!
O(∩_∩)O~
總結(jié)
以上是生活随笔為你收集整理的Java8 Lamdba表达式 002的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地市级地铁数据管理信息系统解决方式
- 下一篇: Java: 数据类型