大家好。值此比賽之際,我決定在這裡寫的不是一篇文章,而是簡短的課程。它將涉及 Java 中的 lambda 表達式和流。如果您已經熟悉並使用它們,請直接跳到本文末尾,您可以練習 JavaRush 的一小部分任務。你需要java 8以上,接受JR的培訓,會有很少的細節和很多看不懂的東西,想搞清楚的慾望很強烈。首先,我不會解釋 lambda 和流的出現歷史,只是我自己也不知道。我只知道它們是從函數式程式設計風格,到我們的OOP風格。在我短暫的學習經驗中,我簡單地展示瞭如何和什麼,有些人覺得很難理解這個想法,所以只要記住如何寫,稍後你就會明白。
現在讓我們繼續討論 Java 流。作為讀者,您可能沒有想到這些流。不,不是
拉姆達斯
如果你根本不知道什麼是 lambda,那麼: lambda 看起來像這樣:(a, b) -> a.compareTo(b)
(переменные) -> действие
現在就足夠了。您可以在這裡閱讀理論:連結一,連結二,但我認為實踐更有趣。我建議你解決以下問題:使用方法1寫一個計算器。該方法應該接受2個數字值和其他東西。您的程式碼將如下所示:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
您需要在方法簽名中輸入3個參數calculate
,在中加入1個命令return
並在中測試呼叫方法main
。 這個方法應該要能夠做些什麼?
- 折疊;
- 乘;
- 劃分;
- 減去;
- 計算根;
- 提升到一個冪;
- 將參數總和除以第一個數字 + 117 求冪;
- 以及您能想到的所有其他操作。
if-else
;char
作為運行指標;switch-case
;- 以及您想到的所有其他內容。
- 只有 lambda,任務就在他們身上。
inputStream
,也不是OutputStream
。這是不同的,它更有趣。流已經取代了循環,雖然不是完全,但仍然如此。他們的座右銘是「不要解釋如何做,而是解釋要做什麼」。流的一個小例子:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
這裡發生了什麼事?我們來新增評論:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
與常規循環比較:
List<String> toSort = new ArrayList<>();
for(String s : myList){
if(s.startsWith("c")){
toSort.add(s.toUpperCase());
}
}
Collections.sort(toSort);
for(String s : toSort){
System.ouy.println(s);
}
當你閱讀程式碼時,一切看起來都很可怕,但是有了註解是不是更容易?這很正常,我也很久沒聽懂。理解的關鍵是實踐。因此,我們開始閱讀第三方文章,尋找我們問題的答案,你也可以在評論中提問,我不會給出完整的答案,但我會指出方向。 我認為對於練習串流處理非常有用的 JavaRush 任務清單:
-
2208 - 可以用 1 個流和 1 個返回來解決,即 該方法的主體將從 開始
return
,然後將有 1 個完整的流。讓我們忽略這個要求StringBuilder
。 -
1908 - 你也可以用 1 個流和 1 個返回來解決它。從讀取文件開始。我不知道如何透過流記錄到文件(如果可能的話),而我們是手動進行的。那些。我們只打開 2 個流(控制台和寫入檔案)。我們透過方法讀取文件,這些方法將會傳回一個工作表或一個流(google 和 javadoc)。
-
1907——理論上也可以一流解決。流的輸入是檔名,輸出是世界的字數。
-
1016 - 用稍微變態的方式,可以1流1回解決;
-
1821 - 非常簡單,1 次流,1 次返回。
這兩個任務將向您介紹另一種流方法和另一種收集器。
-
1925 - 你可以在一個流中獲取一行包含單字的內容,然後將其寫入文件(我不知道是否可以從流寫入文件)
GO TO FULL VERSION