Java 中的十個 「 單行代碼編程 」 ( One Liner )

2021-12-09 傳智匯
翻譯 颯然Hang
連結 github.com/aruld/java-oneliners/wiki本文列舉了十個使用一行代碼即可獨立完成(不依賴其他代碼)的業務邏輯,主要依賴的是Java8中的Lambda和Stream等新特性以及try-with-resources、JAXB等。

 // Range是半開區間
 int [] ia = range(1, 10).map(i -> i * 2).toArray();
 List<Integer> result = range(1, 10).map(i -> i * 2).boxed().collect(toList());

 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);

final List<String> 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);

原作者認為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<String> fileLines = reader.lines().collect(toCollection(LinkedList<String>::new));
 }

 try (Stream<String> lines = Files.lines(new File("data.txt").toPath(), Charset.defaultCharset())) {
   List<String> fileLines = lines.collect(toCollection(LinkedList<String>::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);

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

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

 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();

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

10、集合上的各種查詢(LINQ in Java)

List<Album> 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<Track> allTracks = albums.stream()
  .flatMap(album -> album.tracks.stream())
  .collect(toList());

//根據track的評分對所有track分組
Map<Integer, List<Track>> tracksByRating = allTracks.stream()
  .collect(groupingBy(Track::getRating));


-END-

相關焦點

  • 推薦幾款可以直接在手機上編程的app(包含Java、C、Python等)
    app,分別是:1.java和Android:AIDE集成開發環境。大部分都不需要root,可以直接編寫程序並運行,下面我簡單介紹一下這3個app的安裝和簡單使用,主要內容如下:一.AIDE集成開發環境:這個主要是用來寫java代碼(創建工程、寫小遊戲等),當然也可以寫c++代碼,只不過需要安裝對應的插件才行,自帶自動補全的功能,界面乾淨、整潔,使用起來不錯,下面我介紹一下這個app的安裝和簡單使用:
  • 探索Java中的網絡編程技術
    承蒙關照~探索Java中的網絡編程技術網絡編程就是io技術和網絡技術的結合,網絡模型的定義,只要共用網絡模型就可以兩者連接.網絡模型參考.一座塔有七層,我們需要闖關.第一層物理層->第二層數據鏈路層->第三層網絡層->第四層傳輸層->第五層會話層->第六層表示層->第七層應用層.
  • 你會Java中的Hello World嗎?
    隨著網際網路的高速發展,越來越多的小夥伴開始對編程感興趣,當然小編也是其中的一分子。疫情期間在家無聊,毫不猶豫地打開電腦開始了Java的學習。現在想學習編程,不得不說是真的很方便,在網上隨便一搜,就有好多的教程。小編也學了一個多月了,來給大家分享一些簡單的代碼的編程思路以及小白剛入門遇到的一些小問題和解決方法。
  • 如何應用GOF設計模式中的構建者模式創建複合對象實例
    3、構建者設計模式的程序代碼實現示例下面以創建JDBC資料庫訪問編程中的Statement語句對象實例為示例,為讀者說明構建者設計模式的具體含義和詳細的編程實現代碼。為了方便讀者閱讀如下的程序代碼示例,作者再附錄出如下示例圖。
  • 怎樣能學好Java?在項目實戰中我漸漸成長
    現在管理信息系統的主流開發語言依然是Java,在Java編程方面已經有很多前輩總結了非常有價值的經驗,我也能非常幸運地站在巨人的肩膀上,這樣可以使我看得更遠。初學Java,我也根據前人總結的經驗,從JavaSE部分開始學起。在從網上找到比較系統的Java學習視頻後我便開始跟上練習敲代碼,在敲代碼的過程中,我也對在Java編程的道路上繼續前進充滿信心。
  • 工控上位機編程學習技巧
    對於讀者來說,如果能夠找到該領域中的「四書五經」,則無論在時間上還是金錢上都是最經濟的選擇。好書幾本,勝過爛書幾捆,這個體會想必大家都有。在此,幫助大家遴選各個技術領域裡的「四書五經」。編程的書可謂汗牛充棟,其中經典也是不泛其數,但絕大多數的過來人,都一致認為,要想很快地入門並儘快地投入到編程實踐中,只要其中的四到五本也就夠了,即只看經典中的經典,聖經級的書就可以了。
  • 人生第一行經典代碼,決定程式設計師的出身,更決定程式設計師的職業生涯
    入門語言與職業生涯在計算機編程領域,人生第一行經典代碼——"hello,world!",往往決定了程式設計師的出身,更決定了程式設計師的職業生涯。第一行代碼,決定的是未來程式設計師的入門程式語言。所以,換而言之,程式設計師的入門語言,決定了程式設計師的教育背景,也決定了未來編程路上能走多遠。
  • 程式語言學哪個比較好?2019年最實用的程式語言
    學習編程關鍵是要找到一種合適的語言,那麼程式語言那麼多,該如何選擇?下面萬古網校小編為大家分享一篇關於程式語言選擇的文章,希望能給你帶來幫助!第一大類語言包括Java、C、Python和C++。這類語言都是非常通用的語言,它們並不局限於特定的編程平臺或用途。
  • 我要告訴你:java接口中可以定義private私有方法
    在傳統的Java編程中,被廣為人知的一個知識點是:java Interface接口中不能定義private私有方法。只允許我們定義public訪問權限的方法、抽象方法或靜態方法。但是從Java 9 開始,Interface 接口中允許定義私有方法和私有靜態方法。下面我們就來為大家介紹其語法規則,和為什麼要有這樣的設計。
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    2、為什麼要在軟體應用系統編程實現中應用策略設計模式(1)策略設計模式能夠把「算法」和「環境」分離開在軟體應用系統的程序功能代碼編程實現中,開發人員經常會應用策略設計模式,以達到把實現「算法」的程序代碼本身與使用算法的「客戶」端程序之間的耦合關係相互分離。
  • 知乎神回復:如果一定要在C+和Java中選擇,應該選擇哪一種?
    特別是現代C++ 的發展, 可以帶來更多的組合,靈活方便,可以寫出非常精簡,有美感的代碼。這些導致了C++ 語法繁雜,學習曲線漫長。 2-3天, 學習rust 也很快,一個月吧,再練習下就可以寫代碼了。
  • 這些 Java 8 官方挖的坑,你踩過幾個?
    Base64依賴於簡單的編碼和解碼算法,使用65個字符的US-ASCII子集,其中前64個字符中的每一個都映射到等效的6位二進位序列,第65個字符(=)用於將Base64編碼的文本填充到整數大小。後來產生了3個變種:RFC 4648:Basic,此變體使用RFC 4648和RFC 2045的Base64字母表進行編碼和解碼。
  • java集合詳解合集
    Java集合類基本概念在編程中,常常需要集中存放多個數據。從傳統意義上講,數組是我們的一個很好的選擇,前提是我們事先已經明確知道我們將要保存的對象的數量。所以的集合類都位於java.util包下,後來為了處理多線程環境下的並發安全問題,java5還在java.util.concurrent包下提供了一些多線程支持的集合類。在學習Java中的集合類的API、編程原理的時候,我們一定要明白,"集合"是一個很古老的數學概念,它遠遠早於Java的出現。
  • 自學python程式語言都有哪些免費網站值得收藏?
    python是未來人工智慧最好的程式語言,很多程式設計師在有其她編程基礎的情況選擇學習python是比較容易的,當然現在很多想進入編程界的新手選擇python開始接觸學習編程,但是由於經費有限,只能選擇最便宜的學習方式就是自學成才,不管是新手還是有編程經驗的程式設計師自學最好的選擇就是網上直接看視頻看資料
  • 「原創」Java並發編程系列06|你不知道的final
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫final在Java中是一個保留的關鍵字,可以修飾變量、方法和類。那麼fianl在並發編程中有什麼作用呢?本文就在對final常見應用總結基礎上,講解final並發編程中的應用。
  • Java | 第一個 SpringBoot 工程詳解
    Java | 如何使用 IDEA 構建 Spring Boot 工程學過編程的都知道,學習一門新語言的第一個項目肯定是 Hello World 。那這裡也不例外,我們先創建一個非常簡單的 Hello World 工程。給大家講解 SpringBoot 的項目目錄。創建信息如下:創建信息由於本文重點旨在講解 SpringBoot 的項目目錄。
  • 基礎不牢地動山搖記住 Java 面試中常用的八種排序算法與代碼實現
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫1.直接插入排序經常碰到這樣一類排序問題:把新的數據插入到已經排好的數據列中。
  • Kotlin VS Java:基本語法差異
    之間的差異,對於使用java開發android的大牛們來說可以做個基本的比較。2. avoid NullPointerException       現在我們想提醒你在許多程式語言中最大的痛苦 - 空指針異常。 我們幾乎不能想像自從託尼·霍爾在1965年發明它之後,有多少開發者遭受了空指針,同時試圖使事情更簡單一些。
  • 拋棄 Java 改用 Kotlin 的六個月後,我後悔了!
    在開始使用 Kotlin 編程之前,本文想要分享個故事給你。在這個故事中,作者最早使用 Kotlin 來編寫一個項目,後來 Kotlin 的各種怪異模式以及一些其他障礙越來越讓人厭煩,最終,他們決定重寫這個項目。以下為譯文:一直以來,我對基於 JVM 的語言都非常情有獨鍾。
  • 《代碼整潔之道》:5大基本要點
    本文將本書精簡為五個要點。1.尊重抽象《代碼整潔之道》中寫到:如果要確保函數僅做一件事,則需要確保每個函數的語句都位於同一抽象層次。第一個是固定大小的hr標籤的高級概念,第二個是處理實際標籤構造的低級語法細節。