參考http://how2j.cn/k/collection/collection-aggregate/702.html#nowhere
聚合操作
JDK8之后,引入了對集合的聚合操作,可以非常容易的遍歷,篩選,比較集合中的元素。
像這樣:
String name =heros .stream() .sorted((h1,h2)->h1.hp>h2.hp?-1:1) .skip(2) .map(h->h.getName()) .findFirst() .get();
但是要用好聚合,必須先掌握Lambda表達式,聚合的章節講放在Lambda與聚合操作部分詳細講解
TestAggregate
代碼
package lambda; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; import charactor.Hero; public class TestAggregate { public static void main(String[] args) { Random r = new Random(); List<Hero> heros = new ArrayList<Hero>(); for (int i = 0; i < 10; i++) { heros.add(new Hero("hero " + i, r.nextInt(1000), r.nextInt(100))); } System.out.println("初始化集合后的數據 (最后一個數據重復):"); System.out.println(heros); //傳統方式 Collections.sort(heros,new Comparator<Hero>() { @Override public int compare(Hero o1, Hero o2) { return (int) (o2.hp-o1.hp); } }); Hero hero = heros.get(2); System.out.println("通過傳統方式找出來的hp第三高的英雄名稱是:" + hero.name); //聚合方式 String name =heros .stream() .sorted((h1,h2)->h1.hp>h2.hp?-1:1) .skip(2) .map(h->h.getName()) .findFirst() .get(); System.out.println("通過聚合操作找出來的hp第三高的英雄名稱是:" + name); } }