java range(10)_Java 中的十个 ” 单行代码编程 ” ( OneLiner )
原标题:Java 中的十个 ” 单行代码编程 ” ( OneLiner )
作者:飒然Hang
原文链接:www.rowkey.me/blog/2017/09/09/java-oneliners/
本文列举了十个使用一行代码即可独立完成(不依赖其他代码)的业务逻辑,主要依赖的是Java8中的Lambda和Stream等新特性以及try-with-resources、JAXB等。
1. 对列表/数组中的每个元素都乘以2
// Range是半开区间
int[] ia = range(1, 10).map(i -> i * 2).toArray();
List result = range(1, 10).map(i -> i * 2).boxed().collect(toList());
2. 计算集合/数组中的数字之和
range(1, 1000).sum();
range(1, 1000).reduce(0, Integer::sum);
Stream.iterate(0, i -> i + 1).limit(1000).reduce(0, Integer::sum);
IntStream.iterate(0, i -> i + 1).limit(1000).reduce(0, Integer::sum);
3. 验证字符串是否包含集合中的某一字符串
final List keywords = Arrays.asList("brown", "fox", "dog", "pangram");
final String tweet = "The quick brown fox jumps over a lazy dog. #pangram http://www.rinkworks.com/words/pangrams.shtml";
keywords.stream().anyMatch(tweet::contains);
keywords.stream().reduce(false, (b, keyword) -> b || tweet.contains(keyword), (l, r) -> l || r);
4. 读取文件内容
原作者认为try with resources也是一种单行代码编程。
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
String fileText = reader.lines().reduce("", String::concat);
}
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
List fileLines = reader.lines().collect(toCollection(LinkedList::new));
}
try (Stream lines = Files.lines(new File("data.txt").toPath(), Charset.defaultCharset())) {
List fileLines = lines.collect(toCollection(LinkedList::new));
}
5. 输出歌曲《Happy Birthday to You!》 – 根据集合中不同的元素输出不同的字符串
range(1, 5).boxed().map(i -> { out.print("Happy Birthday "); if (i == 3) return "dear NAME"; else return "to You"; }).forEach(out::println);
6. 过滤并分组集合中的数字
Map> result = Stream.of(49, 58, 76, 82, 88, 90).collect(groupingBy(forPredicate(i -> i > 60, "passed", "failed")));
7. 获取并解析xml协议的Web Service
FeedType feed = JAXB.unmarshal(new URL("http://search.twitter.com/search.atom?&q=java8"), FeedType.class);
JAXB.marshal(feed, System.out);
8. 获得集合中最小/最大的数字
int min = Stream.of(14, 35, -7, 46, 98).reduce(Integer::min).get();
min = Stream.of(14, 35, -7, 46, 98).min(Integer::compare).get();
min = Stream.of(14, 35, -7, 46, 98).mapToInt(Integer::new).min();
int max = Stream.of(14, 35, -7, 46, 98).reduce(Integer::max).get();
max = Stream.of(14, 35, -7, 46, 98).max(Integer::compare).get();
max = Stream.of(14, 35, -7, 46, 98).mapToInt(Integer::new).max();
9. 并行处理
long result = dataList.parallelStream().mapToInt(line -> processItem(line)).sum();
10. 集合上的各种查询(LINQ in Java)
List albums = Arrays.asList(unapologetic, tailgates, red);
//筛选出至少有一个track评级4分以上的专辑,并按照名称排序后打印出来。
albums.stream()
.filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4)))
.sorted(comparing(album -> album.name))
.forEach(album -> System.out.println(album.name));
//合并所有专辑的track
List allTracks = albums.stream()
.flatMap(album -> album.tracks.stream())
.collect(toList());
//根据track的评分对所有track分组
Map> tracksByRating = allTracks.stream()
.collect(groupingBy(Track::getRating));
补充 : 上述的单行代码编程确实能够减少代码的字符数,也经常能够给人以高大上的感觉,但是在Java编程中字符其实是非常廉价的,尤其是现在诸如Intellij等IDE已经具有自动补充/生成代码、重构等智能化功能。如果仅仅是为了减少字符的数量,那么没必要刻意去追求单行代码编程。让你的代码易于阅读才是最关键的。返回搜狐,查看更多
责任编辑:
java range(10)_Java 中的十个 ” 单行代码编程 ” ( OneLiner )相关推荐
- 10 个牛逼的单行代码编程技巧,你会用吗?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 「程序猿DD」星球活动第一期进行中!点击了解详情! 翻译 ...
- 超酷炫技:10 个牛逼的单行代码编程技巧
翻译 | 飒然Hang 来源 | https://www.rowkey.me/blog/2017/09/09/java-oneliners/ 原文 | https://github.com/aruld ...
- java range(10)_Java Year range()用法及代码示例
Year类的range()方法用于获取最大值和最小值的字段范围,并将该字段作为参数传递给此方法.此方法的返回值是该字段的ValueRange对象,并且该方法仅对Year对象支持的那些字段返回Value ...
- java单行字符_十个便捷的单行代码编程技巧
1.对列表/数组中的每个元素都乘以2// www.1b23.com Range是半开区间 int [] ia = range(1, 10).map(i -> i * 2).toArray(); ...
- Swift 中 10 个震惊小伙伴的单行代码
几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红.很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如 Haskell,Ruby,Groo ...
- java list 去重 相同的相加_Java 中的数据流和函数式编程 | Linux 中国
学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin 当 Java SE 8(又名核心 Java 8)在 2014 年被推出时,它引入了一些更改,从根本上影响了用 ...
- java 怎么把list流化_Java 中的数据流和函数式编程
原标题:Java 中的数据流和函数式编程 学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin(作者) 当 Java SE 8(又名核心 Java 8)在 201 ...
- java range类_Java即时类| range()方法与示例
java range类 即时类range()方法 (Instant Class range() method) range() method is available in java.time pac ...
- java 匿名函数_Java中的lambda匿名函数使用
Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...
最新文章
- uni-app用着不香吗?Android,iOS,小程序一套代码吃通所有
- 学习python时报SyntaxError: Non-ASCII character '\xe5' in file解决方法
- SVN switch 用法详解
- java常见的时间处理工具类
- python项目打包部署到ios_Python的iOS自动化打包实例代码
- java 并发锁_Java并发教程–重入锁
- 前端学习(2868):vue3数据劫持解析3
- 即将开播!联想可能成为罗永浩直播带货的首批合作者
- python接口测试_【Python自学】Python接口自动化测试的学习 - 伊凡Ivan
- 图像渲染测试软件,3D渲染参数(测试图及光子图)
- 解密微信电脑版image文件夹下缓存的用户图片
- 用大白菜装centos7_大白菜安装centos7 踩坑记
- 婆媳兵法之——短兵相接15天
- 基于安卓的共享单车设计与实现
- mybatis配置文件 .dtd头部约束 出错报红 【亲测实用,可供参考】
- 《MLB棒球创造营》:走近棒球运动·亚利桑那响尾蛇队
- matlab的sinxx,用MATLAB程序编程:分析方程f(x)=sinx-x/2=0正根的分布情况,并用二分法求正根近似值,使误差不超过0.01....
- 吴恩达新课 医学图像AI(AI for Medicine)专项课程推荐
- uniapp实战项目 (仿知识星球App) - - 配置开发工具和全局css样式
- 【python+E-prime+fNIRS】探究认知资源在情绪与认知灵活性中是否存在中介效应课题
热门文章
- What is the usage of excludedParameters
- 阮一峰react demo代码研究的学习笔记 - how is h1 got parsed - not answer
- ActionTileViewController.js
- ABAP SET UPDATE TASK LOCAL的测试
- include element into ABAP word document
- 用Eclipse调试Java程序的一些小技巧
- 如何判断SAP CDS view的association是inner join还是outer join实现的
- 一次完整的性能测试过程
- 共享可写节包含重定位_未经许可成都街头现共享电动单车?哈啰出行:只是测试...
- 苹果APPLE最新MI芯片笔记本安装第三方内核扩展