原标题: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 )相关推荐

  1. 10 个牛逼的单行代码编程技巧,你会用吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 「程序猿DD」星球活动第一期进行中!点击了解详情! 翻译 ...

  2. 超酷炫技:10 个牛逼的单行代码编程技巧

    翻译 | 飒然Hang 来源 | https://www.rowkey.me/blog/2017/09/09/java-oneliners/ 原文 | https://github.com/aruld ...

  3. java range(10)_Java Year range()用法及代码示例

    Year类的range()方法用于获取最大值和最小值的字段范围,并将该字段作为参数传递给此方法.此方法的返回值是该字段的ValueRange对象,并且该方法仅对Year对象支持的那些字段返回Value ...

  4. java单行字符_十个便捷的单行代码编程技巧

    1.对列表/数组中的每个元素都乘以2//  www.1b23.com Range是半开区间 int [] ia = range(1, 10).map(i -> i * 2).toArray(); ...

  5. Swift 中 10 个震惊小伙伴的单行代码

    几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红.很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如 Haskell,Ruby,Groo ...

  6. java list 去重 相同的相加_Java 中的数据流和函数式编程 | Linux 中国

    学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin 当 Java SE 8(又名核心 Java 8)在 2014 年被推出时,它引入了一些更改,从根本上影响了用 ...

  7. java 怎么把list流化_Java 中的数据流和函数式编程

    原标题:Java 中的数据流和函数式编程 学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin(作者) 当 Java SE 8(又名核心 Java 8)在 201 ...

  8. java range类_Java即时类| range()方法与示例

    java range类 即时类range()方法 (Instant Class range() method) range() method is available in java.time pac ...

  9. java 匿名函数_Java中的lambda匿名函数使用

    Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...

最新文章

  1. uni-app用着不香吗?Android,iOS,小程序一套代码吃通所有
  2. 学习python时报SyntaxError: Non-ASCII character '\xe5' in file解决方法
  3. SVN switch 用法详解
  4. java常见的时间处理工具类
  5. python项目打包部署到ios_Python的iOS自动化打包实例代码
  6. java 并发锁_Java并发教程–重入锁
  7. 前端学习(2868):vue3数据劫持解析3
  8. 即将开播!联想可能成为罗永浩直播带货的首批合作者
  9. python接口测试_【Python自学】Python接口自动化测试的学习 - 伊凡Ivan
  10. 图像渲染测试软件,3D渲染参数(测试图及光子图)
  11. 解密微信电脑版image文件夹下缓存的用户图片
  12. 用大白菜装centos7_大白菜安装centos7 踩坑记
  13. 婆媳兵法之——短兵相接15天
  14. 基于安卓的共享单车设计与实现
  15. mybatis配置文件 .dtd头部约束 出错报红 【亲测实用,可供参考】
  16. 《MLB棒球创造营》:走近棒球运动·亚利桑那响尾蛇队
  17. matlab的sinxx,用MATLAB程序编程:分析方程f(x)=sinx-x/2=0正根的分布情况,并用二分法求正根近似值,使误差不超过0.01....
  18. 吴恩达新课 医学图像AI(AI for Medicine)专项课程推荐
  19. uniapp实战项目 (仿知识星球App) - - 配置开发工具和全局css样式
  20. 【python+E-prime+fNIRS】探究认知资源在情绪与认知灵活性中是否存在中介效应课题

热门文章

  1. What is the usage of excludedParameters
  2. 阮一峰react demo代码研究的学习笔记 - how is h1 got parsed - not answer
  3. ActionTileViewController.js
  4. ABAP SET UPDATE TASK LOCAL的测试
  5. include element into ABAP word document
  6. 用Eclipse调试Java程序的一些小技巧
  7. 如何判断SAP CDS view的association是inner join还是outer join实现的
  8. 一次完整的性能测试过程
  9. 共享可写节包含重定位_未经许可成都街头现共享电动单车?哈啰出行:只是测试...
  10. 苹果APPLE最新MI芯片笔记本安装第三方内核扩展