Lambda基本使用

lambda基本使用

1.将List转成Map<Id,Person>

Map<Id,Person> map = list.parallelStream(). collect(Collectors.toMap(Person::getId, p -> p));

2.将List按照sex分组

Map<String,Person> map = list.parallelStream(). collect(Collectors.groupingBy(Person::getSex));

3.取出List的平均score

dobble avg = list.parallelStream(). mapToDouble(p -> p.getScore()).average().getAsDouble();

4.取出List中id为10的学生

Optional op = list.parallelStream().filter(p -> p.getId().equals(10)).findFirst(); Person p = op.get();

5.取出List中所有的id

List ids = list.parallelSream().map(Person::getId).collect(Collectors.toList());

6.根据score,取前100名 (降序)

List persons =list.parallelStream(). sorted(Comparator.comparing(Person::getScore()).reversed()). limit(100).collect(Collectors.toList()); //使用guava List peopleList1 = Ordering.natural().onResultOf(People::getId).sortedCopy(peopleList);

7.取出分数最高的学生信息

Person person = list.parallelStream().max(Comparator.comparing(Person::getScore()).get();

// 只能取出最小的ID 不能取出整个对象

Integer min = Ordering.natural().reverse().min(Iterables.transform(peopleList, People::getId));

8.算所有学生的分数

Long sum = list.parallelStream().map(Person::getScore).reduce((x1,x2) -> x1+x2).get();

9.求所有金钱总和

BigDecimal money = list.parallelStream().map(Person::getMoney).reduce(BigDecimal::add).get();

10.取出两个不同List对象中相等的Id

11.剔除List 中金钱一样的对象

  1. Collection values = list.parallelStream(). collect(Collectors.toMap(Person::getMoney, p -> p , (p,q) -> p)).values();

12.将List转成Map<Long,List>。

(如果需要,可以转成Map<String,List>等等)

Map<Long, List> result = listHello.stream().collect(Collectors.groupingBy(Person::getId));

13.CompletableFuture结合lambda异步执行并汇总

14.对象转map

Map<String, String> collect = privilegeObjList.stream().collect(Collectors.toMap(PlatformPrivilegeF::getModuleNo, PlatformPrivilegeF::getPrivilege));

15.把对象的moduleNo当Map的key,privilege当map的value List集合元素。

Map<String, List> map = privilegeObjList.stream().collect( Collectors.groupingBy(PlatformPrivilegeF::getModuleNo, Collectors.mapping(PlatformPrivilegeF::getPrivilege, Collectors.toList())));