java实现业务编排_怎样用Java 8优雅的开发业务

怎样用Java 8优雅的开发业务

函数式编程

流式编程

基本原理

在Java中流式编程的基本原理有两点。

构建流

数据流转(流水线)

规约

IntStream.rangeClosed(1, 100) // 1. 构建流

.mapToObj(String::valueOf)// 2. 数据流转(流水线)

.collect(joining()); // 3. 规约

案例

英雄的主位置一共有几类,分别是什么

@Test

fun t1() {

// 英雄的主位置一共有几类,分别是什么

// 映射

val roleMains = heroes.map(Hero::getRoleMain)

// 过滤为空的数据

.filter(Objects::nonNull)

// 去重

.distinct()

println(roleMains.size)

println(roleMains)

}

@Test

public void t1() {

// 英雄的主位置一共有几类,分别是什么

List roleMains = heroes.stream()

// 映射

.map(Hero::getRoleMain)

// 过滤为空的数据

.filter(Objects::nonNull)

// 去重

.distinct()

// 收集列表

.collect(toList());

System.out.println(roleMains.size());

System.out.println(roleMains);

}

英雄按主次位置分组后,输出每个分组有多少英雄,其中:近战英雄有多少位,远程英雄有多少位

@Test

fun t2() {

// 英雄按主次位置分组后,输出每个分组有多少英雄,其中:近战英雄有多少位,远程英雄有多少位

// 主次位置分组的英雄数量

val groupHeroCount = heroes.groupingBy {

Pair.of(it.roleMain, it.roleAssist)

}.eachCount()

// 主次分组后,再按攻击范围分组的英雄数量

val groupThenGroupCount = heroes.groupBy {

Pair.of(it.roleMain, it.roleAssist)

}.map {

val value = it.value.groupingBy(Hero::getAttackRange).eachCount()

Pair.of(it.key, value)

}.associateBy({ it.left }, { it.value })

// 遍历输出

groupThenGroupCount.forEach { (groupKey, groupValue) ->

val groupingCount = groupHeroCount[groupKey]

print("英雄分组key为:$groupKey;英雄数量:$groupingCount;")

groupValue.forEach { (countKey, countValue) ->

print("英雄攻击范围:$countKey;英雄数量:$countValue;")

}

println()

}

}

@Test

public void t2() {

// 英雄按主次位置分组后,输出每个分组有多少英雄,其中:近战英雄有多少位,远程英雄有多少位

// 主次位置分组的英雄数量

Map, Long> groupHeroCount = heroes.stream()

.collect(groupingBy(hero -> Pair.of(hero.getRoleMain(), hero.getRoleAssist()), counting()));

// 主次分组后,再按攻击范围分组的英雄数量

Map, Map> groupThenGroupCount = heroes.stream()

.collect(groupingBy(hero -> Pair.of(hero.getRoleMain(), hero.getRoleAssist()),

groupingBy(Hero::getAttackRange, counting())));

// 遍历输出

groupThenGroupCount.forEach((groupKey, groupValue) ->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值