Luồng Java cho người mới bắt đầu: Giới thiệu về Sử dụng Luồng trong Java

Luồng Java cho người mới bắt đầu: Giới thiệu về Sử dụng Luồng trong Java

Các luồng Java 8 cho phép các nhà phát triển trích xuất dữ liệu chính xác từ một bộ sưu tập lớn, sử dụng một tập hợp các hoạt động được xác định trước.





Trước khi phát hành Java 8, việc sử dụng thuật ngữ 'luồng' trong Java sẽ tự động được liên kết với I / O. Tuy nhiên, Java 8 đã giới thiệu một luồng có thể được coi là một tập hợp các bước tính toán được xâu chuỗi lại với nhau trong cái thường được gọi là 'đường ống luồng'.





Bài viết này sẽ giới thiệu cho bạn về các luồng Java 8 và chứng minh chúng có thể hữu ích như thế nào trong các dự án của bạn.





Luồng là gì?

Luồng là một giao diện Java lấy nguồn, tiến hành một tập hợp các thao tác để trích xuất dữ liệu cụ thể, sau đó cung cấp dữ liệu đó cho ứng dụng để sử dụng. Về cơ bản, nó cho phép bạn trích xuất dữ liệu chuyên biệt từ bộ sưu tập dữ liệu tổng quát.

Cách Luồng hoạt động

Một đường dẫn luồng luôn bắt đầu bằng một nguồn. Loại nguồn phụ thuộc vào loại dữ liệu mà bạn đang xử lý, nhưng hai trong số những loại phổ biến hơn là mảng và bộ sưu tập.



Để chuyển đổi bộ sưu tập thành một luồng ban đầu, bạn sẽ cần thêm dòng() chức năng của nguồn. Điều này sẽ đặt nguồn vào đường ống luồng nơi có một số hoạt động trung gian khác nhau (chẳng hạn như lọc()loại() ) có thể hoạt động trên nó.

Sau khi tất cả các hoạt động trung gian bắt buộc được thực hiện, bạn có thể giới thiệu một hoạt động đầu cuối (chẳng hạn như cho mỗi() ), sẽ tạo ra dữ liệu được trích xuất trước đó từ nguồn.





Cuộc sống không có suối

Java 8 được phát hành vào năm 2014, nhưng trước đó, các nhà phát triển Java vẫn cần trích xuất dữ liệu chuyên biệt từ tập hợp dữ liệu chung.

nhiệt độ cpu của bạn nên ở mức nào

Giả sử bạn có một danh sách các ký tự ngẫu nhiên được kết hợp với các số ngẫu nhiên để tạo thành các giá trị chuỗi duy nhất, nhưng bạn chỉ muốn các giá trị bắt đầu bằng ký tự C và bạn muốn sắp xếp kết quả theo thứ tự tăng dần. Đây là cách bạn sẽ trích xuất dữ liệu đó mà không có luồng.





Có liên quan: Những điều bạn cần biết về cách sử dụng chuỗi trong Java

Ví dụ về lọc và sắp xếp các giá trị không có luồng


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

Bạn cũng sẽ cần khai báo và khởi tạo danh sách mảng cho dù bạn đang sử dụng luồng hoặc một số phương pháp trích xuất khác. Những gì bạn sẽ không cần làm nếu đang sử dụng luồng là khai báo một biến mới để giữ các giá trị bắt buộc, cũng như tạo năm dòng mã cộng khác trong ví dụ trên.

Có liên quan: Cách tạo và thực hiện các thao tác trên mảng trong Java

Đoạn mã trên tạo ra kết quả sau trong bảng điều khiển:


C11
C12
C13
C14
C15
C16

Life With Streams

Trong lập trình, hiệu quả nói lên việc tạo ra cùng một kết quả với ít mã hơn đáng kể. Đây chính xác là những gì một đường ống luồng làm cho một lập trình viên. Vì vậy, lần tới khi ai đó hỏi: tại sao việc sử dụng luồng trong dự án của bạn lại quan trọng? Nói một cách đơn giản: các luồng hỗ trợ lập trình hiệu quả.

Tiếp tục với ví dụ của chúng tôi ở trên, đây là cách giới thiệu các luồng biến đổi toàn bộ chương trình.

Lọc và sắp xếp giá trị với ví dụ về luồng


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Đoạn mã trên cho thấy giao diện luồng mạnh mẽ như thế nào. Nó nhận một danh sách các giá trị mảng ngẫu nhiên và chuyển nó thành một luồng bằng cách sử dụng dòng() hàm số. Luồng sau đó được giảm thành danh sách mảng có chứa các giá trị bắt buộc (là tất cả các giá trị bắt đầu bằng NS ), sử dụng lọc() hàm số.

Như bạn có thể thấy trong ví dụ trên, NS các giá trị được sắp xếp ngẫu nhiên trong danh sách mảng. Nếu bạn in luồng tại thời điểm này trong đường dẫn, giá trị C15 sẽ được in đầu tiên. Do đó, loại() hàm được đưa vào đường ống luồng để sắp xếp lại mảng mới theo thứ tự tăng dần.

Chức năng cuối cùng trong đường dẫn luồng là cho mỗi() hàm số. Đây là một hàm đầu cuối được sử dụng để dừng luồng luồng và tạo ra các kết quả sau trong bảng điều khiển:


C11
C12
C13
C14
C15
C16

Luồng hoạt động trung gian

Có một danh sách phong phú các hoạt động trung gian có thể được sử dụng trong một đường dẫn luồng.

Đường dẫn luồng luôn bắt đầu với một nguồn duy nhất và dòng() và luôn kết thúc bằng một thao tác đầu cuối duy nhất (mặc dù có một số thao tác khác nhau để lựa chọn.) Nhưng ở giữa hai phần này là danh sách sáu thao tác trung gian mà bạn có thể sử dụng.

Trong ví dụ của chúng tôi ở trên, chỉ có hai trong số các phép toán trung gian này được sử dụng --- lọc()loại() . Thao tác trung gian mà bạn chọn sẽ phụ thuộc vào các tác vụ bạn muốn thực hiện.

Nếu bất kỳ giá trị nào bắt đầu bằng C trong danh sách mảng của chúng tôi ở trên là chữ thường và chúng tôi thực hiện các phép toán trung gian tương tự trên chúng, chúng tôi sẽ nhận được kết quả sau.

Thực hiện các thao tác lọc và sắp xếp trên ví dụ về giá trị chữ thường


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Đoạn mã trên sẽ tạo ra các giá trị sau trong bảng điều khiển:


C11
C12
C14
C15

Vấn đề duy nhất với đầu ra ở trên là nó không thể hiện chính xác tất cả các NS giá trị trong danh sách mảng của chúng tôi. Một cách tốt để khắc phục lỗi nhỏ này là đưa một thao tác trung gian khác vào đường ống luồng; hoạt động này được gọi là bản đồ() hàm số.

Sử dụng ví dụ về hàm bản đồ


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Các bản đồ() hàm biến đổi một đối tượng từ trạng thái này sang trạng thái khác; trong ví dụ của chúng tôi ở trên, nó chuyển đổi tất cả các ký tự thường trong danh sách mảng thành các ký tự viết hoa.

Đặt bản đồ() chức năng ngay trước lọc() hàm truy xuất tất cả các giá trị bắt đầu bằng NS từ danh sách mảng.

Đoạn mã trên tạo ra kết quả sau trong bảng điều khiển, biểu diễn thành công tất cả NS giá trị trong danh sách mảng.


C11
C12
C13
C14
C15
C16

Ba thao tác trung gian khác mà bạn có thể sử dụng trong các ứng dụng của mình bao gồm:

  • nhìn trộm ()
  • giới hạn()
  • nhảy()

Các luồng Java 8 tạo điều kiện thuận lợi cho việc tạo mã hiệu quả

Với các luồng Java 8, bạn có thể trích xuất dữ liệu cụ thể, có liên quan từ một nguồn lớn bằng một dòng mã. Miễn là bạn bao gồm chữ cái đầu dòng() chức năng và một toán tử đầu cuối, bạn có thể sử dụng bất kỳ kết hợp nào của các hoạt động trung gian để cung cấp kết quả đầu ra phù hợp cho mục tiêu của bạn.

cách tắt ps4

Nếu bạn đang thắc mắc về dòng mã được bao gồm trong lọc() hàm số; nó được gọi là 'biểu thức lambda.' Các biểu thức Lambda là một tính năng khác được giới thiệu với Java 8 và nó có rất nhiều gói mà bạn có thể thấy hữu ích.

Đăng lại Đăng lại tiếng riu ríu E-mail Giới thiệu nhanh về Java 8 Lambdas

Nếu bạn là một lập trình viên Java và bạn muốn tìm hiểu thêm về lambda Java 8, trong bài viết này, chúng ta sẽ xem xét kỹ hơn về cú pháp và cách sử dụng lambda.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Java
  • Hướng dẫn viết mã
Giới thiệu về tác giả Kadeisha Kean(21 bài báo đã xuất bản)

Kadeisha Kean là Nhà phát triển Phần mềm Full-Stack và Người viết Kỹ thuật / Công nghệ. Cô ấy có khả năng khác biệt để đơn giản hóa một số khái niệm công nghệ phức tạp nhất; sản xuất vật liệu có thể dễ dàng hiểu được bởi bất kỳ người mới làm quen với công nghệ. Cô ấy đam mê viết lách, phát triển phần mềm thú vị và đi du lịch thế giới (thông qua phim tài liệu).

Xem thêm từ Kadeisha Kean

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký