当前位置: 首页 > 科技观察

Java中的十个“一行”(OneLiner)

时间:2023-03-23 11:29:58 科技观察

本文列举了十个可以用一行代码独立完成(不依赖其他代码)的业务逻辑,主要依赖Java8中的Lambda和Stream等。New特性和try-with-resources,JAXB等1.将list/array中的每个元素乘以2//Range是一个半开区间int[]ia=range(1,10).map(i->i*2).toArray();Listresult=range(1,10).map(i->i*2).boxed().collect(toList());2.计算集合/数组范围(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.验证字符串是否包含集合中的某个字符串rinkworks.com/words/pangrams.shtml";keywords.stream().anyMatch(tweet::contains);keywords.stream().reduce(false,(b,keyword)->b||tweet.contains(关键字),(l,r)->l||r);4.阅读原作者认为trywithresources也是一种单行代码编程。try(BufferedReaderreader=newBufferedReader(newFileReader("data.txt"))){StringfileText=reader.lines().reduce("",String::concat);}try(BufferedReaderreader=newBufferedReader(newFileReader("data.txt"))){ListfileLines=reader.lines().collect(toCollection(LinkedList::new));}try(Streamlines=Files.lines(newFile("data.txt").toPath(),Charset.defaultCharset())){ListfileLines=lines.collect(toCollection(LinkedList::new));}5.输出歌曲《Happy Birthday to You!》–根据不同的incollection元素输出不同的字符串range(1,5).boxed().map(i->{out.print("HappyBirthday");if(i==3)return"dearNAME";elsereturn"toYou";}).forEach(out::println);6.过滤并分组集合中的数字Map>result=Stream.of(49,58,76,82,88,90).collect(groupingBy(forPredicate(i->i>60,"passed","failed")));7、获取并解析xml协议的WebServiceFeed。FeedTypefeed=JAXB.unmarshal(newURL("http://search.twitter.com/search.atom?&q=java8"),FeedType.class);JAXB.marshal(feed,System.out);8.获取最小/***数intmin=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();intmax=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.并行处理longresult=dataList.parallelStream().mapToInt(line->processItem(line)).sum();10.各种集合查询(LINQinJava)Listalbums=Arrays.asList(unapologetic,tailgates,red);//筛选出至少一张曲目评分在4以上的专辑,按名称排序打印出来albums.stream().filter(a->a.tracks.stream().anyMatch(t->(t.rating>=4))).sorted(比较(album->album.name)).forEach(album->System.out.println(album.name));//合并所有专辑的trackListallTracks=albums.stream().flatMap(album->album.tracks.stream()).collect(toList());//根据track的分数对所有track进行分组Map>tracksByRating=allTracks.stream().collect(groupingBy(Track::getRating));

最新推荐
猜你喜欢