Java中的十个”单行代码编程”(OneLiner)

本文列举了十个使用一行代码即可独立完成(不依赖其他代码)的业务逻辑,主要依赖的是Java8中的Lambda和Stream等新特性以及try-with-resources、JAXB等。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名虚拟主机、营销软件、网站建设、宁波网站维护、网站推广。

1、对列表/数组中的每个元素都乘以2

 
 
 
 
  1. // Range是半开区间
  2.  int[] ia = range(1, 10).map(i -> i * 2).toArray();
  3.  List result = range(1, 10).map(i -> i * 2).boxed().collect(toList());

2、计算集合/数组中的数字之和

 
 
 
 
  1. range(1, 1000).sum();
  2. range(1, 1000).reduce(0, Integer::sum);
  3. Stream.iterate(0, i -> i + 1).limit(1000).reduce(0, Integer::sum);
  4. IntStream.iterate(0, i -> i + 1).limit(1000).reduce(0, Integer::sum);

3、验证字符串是否包含集合中的某一字符串

 
 
 
 
  1. final List keywords = Arrays.asList("brown", "fox", "dog", "pangram");
  2. final String tweet = "The quick brown fox jumps over a lazy dog. #pangram http://www.rinkworks.com/words/pangrams.shtml";
  3. keywords.stream().anyMatch(tweet::contains);
  4. keywords.stream().reduce(false, (b, keyword) -> b || tweet.contains(keyword), (l, r) -> l || r);

4、读取文件内容

  • 原作者认为try with resources也是一种单行代码编程。
 
 
 
 
  1. try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
  2.   String fileText = reader.lines().reduce("", String::concat);
  3. }
  4. try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
  5.   List fileLines = reader.lines().collect(toCollection(LinkedList::new));
  6. }
  7. try (Stream lines = Files.lines(new File("data.txt").toPath(), Charset.defaultCharset())) {
  8.   List fileLines = lines.collect(toCollection(LinkedList::new));
  9. }

5、输出歌曲《Happy Birthday to You!》 – 根据集合中不同的元素输出不同的字符串

 
 
 
 
  1. range(1, 5).boxed().map(i -> { out.print("Happy Birthday "); if (i == 3) return "dear NAME"; else return "to You"; }).forEach(out::println);

6、过滤并分组集合中的数字

 
 
 
 
  1. Map> result = Stream.of(49, 58, 76, 82, 88, 90).collect(groupingBy(forPredicate(i -> i > 60, "passed", "failed")));

7、获取并解析xml协议的Web Service

 
 
 
 
  1. FeedType feed = JAXB.unmarshal(new URL("http://search.twitter.com/search.atom?&q=java8"), FeedType.class);
  2. JAXB.marshal(feed, System.out);

8、获得集合中最小/***的数字

 
 
 
 
  1. int min = Stream.of(14, 35, -7, 46, 98).reduce(Integer::min).get();
  2.  min = Stream.of(14, 35, -7, 46, 98).min(Integer::compare).get();
  3.  min = Stream.of(14, 35, -7, 46, 98).mapToInt(Integer::new).min();
  4.  int max = Stream.of(14, 35, -7, 46, 98).reduce(Integer::max).get();
  5.  max = Stream.of(14, 35, -7, 46, 98).max(Integer::compare).get();
  6.  max = Stream.of(14, 35, -7, 46, 98).mapToInt(Integer::new).max();

9、并行处理

 
 
 
 
  1. long result = dataList.parallelStream().mapToInt(line -> processItem(line)).sum();

10、集合上的各种查询(LINQ in Java)

 
 
 
 
  1. List albums = Arrays.asList(unapologetic, tailgates, red);
  2. //筛选出至少有一个track评级4分以上的专辑,并按照名称排序后打印出来。
  3. albums.stream()
  4.   .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4)))
  5.   .sorted(comparing(album -> album.name))
  6.   .forEach(album -> System.out.println(album.name));
  7. //合并所有专辑的track
  8. List allTracks = albums.stream()
  9.   .flatMap(album -> album.tracks.stream())
  10.   .collect(toList());
  11. //根据track的评分对所有track分组
  12. Map> tracksByRating = allTracks.stream()
  13.   .collect(groupingBy(Track::getRating));

名称栏目:Java中的十个”单行代码编程”(OneLiner)
标题路径:http://www.shufengxianlan.com/qtweb/news2/539852.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联