لامبدا
اگر اصلاً نمی دانید لامبدا چیست، پس: لامبدا شبیه این است:(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
;- و هر چیز دیگری که به ذهن شما می رسد.
- فقط لامبدا، وظیفه بر عهده آنهاست.
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 بازگشت.
این 2 کار شما را با یک روش استریمینگ دیگر و یک کلکتور دیگر آشنا می کند.
-
1925 - میتوانید یک خط با کلمات در یک جریان دریافت کنید و سپس آن را در یک فایل بنویسید (نمیدانم آیا امکان نوشتن روی یک فایل از یک جریان وجود دارد یا خیر)
GO TO FULL VERSION