
一直在 kotlin 和 java 之间来回开发,有时候在写 java 的时候经常想起 kotlin 中特别方便的一些 lambda 方法,找了一圈好像也没找到合适的,就决定自己手撸一个用在自己项目里了,初版还很粗糙,欢迎大佬们提意见。项目地址在 https://github.com/zshnb/extension-lambda 。
下面附一段使用说明。
// 把一个 map 转成另一个 value 不变,key 不一样的 map java.util.Map<Integer, Integer> map = java.util.Map.of(1, 1, 2, 2, 3, 3); java.util.Map<String, Integer> anotherMap = Map.mapKey(map, entry -> entry.etKey().toString()); // 把一个 map 转成另一个 key 不变,value 不一样的 map java.util.Map<Integer, Integer> map = java.util.Map.of(1, 1, 2, 2, 3, 3); java.util.Map<Integer, String> anotherMap = Map.mapValue(map, entry -> entry.getKey().toString()); // 可以在 lambda 方法里引用 list 的下标 List<Integer> integers = mapIndex(pairs, (index, pair) -> { Assertions.assertEquals(index, atomicInteger.getAndIncrement()); return pair.getLeft(); }).collect(Collectors.toList()); // 把 list 转换成 map, key 的值由 lambda 得到 Map<String, Pair<Integer, String>> map = associateBy(pairs, Pair::getRight); // 把 list 转换成 map, value 的值由 lambda 得到 Map<String, Pair<Integer, String>> map = associateWith(pairs, Pair::getRight); // 分组,相同 key 的 item 在一个 list 里,key 由 lambda 得到 Map<Integer, List<Pair<Integer, String>>> map = GroupBy.groupBy(pairs, Pair::getLeft); // 与上面不同的是 list 中的 value 也可以通过 lambda 得到 Map<Integer, List<String>> map = GroupBy.groupBy(pairs, Pair::getLeft, Pair::getRight); // with 的 lambda 里返回的是传入的对象 Pair<Integer, Integer> pair = With.with(Pair.pair(1, 2), innerPair -> { innerPair.setLeft(2); innerPair.setRight(3); return innerPair; }); // let 的 lambda 里返回的是 lambda 里最后 return 语句的值 Integer integer = Let.let(Pair.pair(1, 2), Pair::getLeft); // any 任何一个元素符合 predicate, 返回 true, 类似 or boolean result = Any.any(pairs, p -> p.getLeft() % 2 == 0); // all 所有元素符合 predicate,返回 true, 类似 and boolean result = All.all(pairs, p -> p.getLeft() > 0); 1 nthin0 2022 年 4 月 22 日 推荐可以试下这个库[vavr]( https://www.vavr.io/vavr-docs/) |
2 ychost 2022 年 4 月 22 日 这些功能 stream 都有吧,我觉得 Java 缺 C# 的 LINQ ,最近 Groovy 4.0 已经把 LINQ 移植过来了,叫 GINQ ```groovy @GQ(parallel=true) def ginq(x) { from n in [1, 2, 3] where n < x select n } ``` |
6 golangLover 2022 年 4 月 22 日 via Android 留名支持一下 |
7 yazinnnn 2022 年 4 月 22 日 直接引入 kotlin 标准库,把这些 kotlin 扩展函数当 java 静态函数用咋样? |
9 gabon 2022 年 4 月 23 日 via iPhone streamex 有点像 |
11 1194129822 2022 年 4 月 23 日 kotlin 很多功能,java 高版本也有了。stream 惰性计算比 kotlin 增强集合其实更好,只是 api 可能没那么友好。感觉 kotlin 好用的语法糖也就闭包和扩展了,let ,apply ,with 这些高阶函数挺好用的。 |
12 857681664 OP @1194129822 惰性计算 kotlin 也有,其实就是感觉 java 的 lambda 用起来有点罗嗦 hh, 要不然怎么能 kotlin 真香呢。 |
13 Achieve7 2022 年 4 月 24 日 我现在就把 kt 当 java 的语法糖在使用, 另外协程也挺香的 |