JavaRush /Blog Java /Random-VI /Lambdas và suối, chỉ thực hành, không có lý thuyết

Lambdas và suối, chỉ thực hành, không có lý thuyết

Xuất bản trong nhóm
Chào mọi người. Nhân dịp cuộc thi, tôi quyết định viết ở đây không phải một bài báo mà là một bài học ngắn. Nó sẽ nói về lambdas và các luồng trong Java. Nếu bạn đã quen thuộc và sử dụng chúng thì hãy chuyển thẳng đến cuối bài viết, sẽ có một số nhiệm vụ chọn lọc với JavaRush mà bạn có thể thực hành. Bạn cần java 8 trở lên, được JR đào tạo, sẽ có ít chi tiết và nhiều điều khó hiểu, rất muốn tìm hiểu. Hãy bắt đầu với thực tế là tôi sẽ không giải thích lịch sử xuất hiện của lambdas và suối, chỉ là bản thân tôi cũng không biết điều đó. Tôi chỉ biết rằng chúng đến từ phong cách lập trình hàm, đến phong cách OOP của chúng tôi. Trong kinh nghiệm học tập ngắn ngủi của mình, tôi chỉ đơn giản chỉ ra cách làm và cái gì, một số bạn thấy khó hiểu ý nên chỉ cần nhớ cách viết, sau này sẽ hiểu.

Lambda

Lambdas và suối, chỉ thực hành, không lý thuyết - 1Lambdas và suối, chỉ thực hành, không lý thuyết - 2Nếu bạn hoàn toàn không biết lambda là gì thì: Lambda trông như thế này:
(a, b) -> a.compareTo(b)
(переменные) -> действие
Bây giờ thế là đủ rồi. Bạn có thể đọc lý thuyết ở đây: liên kết một , liên kết hai , nhưng tôi nghĩ thực hành sẽ thú vị hơn nhiều. Tôi đề nghị bạn giải quyết vấn đề sau: Viết máy tính bằng phương pháp 1. Phương thức phải chấp nhận 2 giá trị kỹ thuật số và một số giá trị khác. Mã của bạn sẽ trông giống như thế này:
class Lambda{
    public static void main (String[] args) {
	}

    public static double calculate(){
       	return null;
    }
}
Bạn cần nhập 3 tham số vào chữ ký phương thức calculate, thêm 1 lệnh vào returnvà thử gọi phương thức này trong main. Phương pháp này có thể làm gì?
  • nếp gấp;
  • nhân;
  • chia;
  • trừ;
  • tính toán gốc;
  • nâng lên quyền lực;
  • nâng lũy ​​thừa tổng các đối số chia cho số đầu tiên + 117;
  • và tất cả các hoạt động khác mà bạn có thể nghĩ đến.
Những gì không nên sử dụng:
  • if-else;
  • charnhư một chỉ báo hoạt động;
  • switch-case;
  • và mọi thứ khác xuất hiện trong đầu bạn.
Những gì bạn có thể sử dụng:
  • Chỉ có lambdas thôi, nhiệm vụ thuộc về họ.
- Cái gì? Và đó là tất cả? - Vâng, chỉ vậy thôi, vì nghĩa đen là bạn phải thêm 3 dòng, nếu tôi gợi ý ít nhất một dòng thì phần còn lại sẽ tự động viết. Và nếu muốn, bạn có thể google ví dụ và cố gắng hiểu. Tất nhiên, bạn sẽ tự kiểm tra và nếu bạn gian lận thì sẽ không ai biết, nhưng tại sao? Sau khi giải quyết được một vấn đề đơn giản như vậy, tất cả 1,5 học sinh của tôi đã hiểu sơ bộ về lambdas là gì và cách sử dụng chúng. Điều này sẽ rất cần thiết cho việc phát trực tuyến. Nếu bạn muốn khoe khoang về kết quả và tìm hiểu xem mình đã làm đúng hay chưa, hãy gửi mã qua tin nhắn riêng. Không cần phải bình luận; bạn có thể thêm những lời khuyên thú vị vào đó (nhưng theo cách không làm cho nhiệm vụ trở nên quá dễ dàng). Một lần nữa, sau khi giải quyết ví dụ này, bạn hẳn đã hiểu sơ bộ về cách sử dụng lambdas.
Lambdas và suối, chỉ thực hành, không lý thuyết - 3
Bây giờ hãy chuyển sang các luồng java. Đây không phải là những luồng mà bạn, người đọc, có thể đã nghĩ tới. Không, không phải inputStreamvà không phải vậy OutputStream. Nó khác, thú vị hơn. Các luồng đã thay thế các chu kỳ, không hoàn toàn, nhưng vẫn vậy. Họ được phục vụ với phương châm “không giải thích cách làm, hãy giải thích phải làm gì”. Một ví dụ nhỏ về luồng:
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);
Những gì đang xảy ra ở đây? Hãy thêm ý kiến:
myList.stream() // получить поток
    .filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
    .map(String::toUpperCase)  // преобразовать все значения, перевести в верхний регистр
    .sorted() // отсортировать по порядку (дефолтный порядо)
    .forEach(System.out::println); // вывести каждый элемент на экран
So sánh với vòng lặp thông thường:
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);
}
Khi bạn đọc mã, mọi thứ trông thật đáng sợ, nhưng việc bình luận có dễ dàng hơn không? Điều này là bình thường, tôi cũng đã không hiểu chúng từ lâu rồi. Chìa khóa của sự hiểu biết là thực hành. Do đó, chúng tôi bắt đầu đọc các bài viết của bên thứ ba và tìm kiếm câu trả lời cho câu hỏi của mình, bạn cũng có thể hỏi họ ở đây trong phần bình luận, tôi sẽ không đưa ra câu trả lời đầy đủ nhưng tôi sẽ chỉ hướng. Danh sách các tác vụ từ JavaRush mà tôi nghĩ là rất phù hợp để thực hành phát trực tuyến:
  • 2208 - có thể được giải bằng 1 luồng và 1 trả về, tức là. phần thân của phương thức sẽ bắt đầu bằng returnvà sau đó sẽ có toàn bộ 1 luồng. Hãy bỏ qua yêu cầu StringBuilder.

  • 1908 - bạn cũng có thể giải quyết bằng 1 luồng và 1 trả về. Bắt đầu bằng việc đọc tập tin. Tôi không biết cách ghi vào tệp qua luồng (nếu có thể), trong khi chúng tôi thực hiện thủ công. Những thứ kia. Chúng tôi chỉ mở 2 luồng (bảng điều khiển và ghi vào tệp). Chúng tôi đọc tệp thông qua các phương thức sẽ trả về cho chúng tôi một trang tính hoặc một luồng (google và javadoc).

  • 1907 - về lý thuyết, nó cũng có thể được giải trong một luồng. Đầu vào của luồng là tên tệp, đầu ra là số lượng từ trên thế giới.

Đó là tất cả. Nếu có thể, tôi sẽ viết một câu chuyện đơn giản khác. Theo tôi, đọc về một thứ gì đó hay ho mà không có cơ hội thử nó thì có phần nhàm chán hay gì đó. Và sau máy tính và 3 câu đố, tôi nghĩ bạn đã hiểu rõ về lambda và luồng, vì vậy hãy đọc về tất cả các khả năng nếu bạn chưa đọc. CẬP NHẬT:
  • 1016 - hơi biến thái, bạn có thể giải 1 luồng và 1 lượt về;

  • 1821 - rất dễ dàng và trong 1 luồng và 1 lần quay lại.

    2 nhiệm vụ này sẽ giới thiệu cho bạn một phương thức phát trực tuyến khác và một bộ sưu tập khác.

  • 1925 - bạn có thể lấy một dòng chứa các từ trong một luồng và sau đó ghi nó vào một tệp (Tôi không biết liệu có thể ghi vào tệp từ một luồng hay không)

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION