一直在 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.getKey().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);
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.