JavaRush /Blog Java /Random-VI /Nghỉ giải lao #209. 4 cách để tìm bản sao trong danh sách...

Nghỉ giải lao #209. 4 cách để tìm bản sao trong danh sách Java Cách tạo một trình phát đa phương tiện đơn giản bằng Java

Xuất bản trong nhóm

4 cách để tìm bản sao trong danh sách Java

Nguồn: Codippa Bài viết này trình bày nhiều cách khác nhau để tìm các bản sao trong Danh sách. Chúng tôi gọi các phần tử trùng lặp xuất hiện nhiều lần. Nghỉ giải lao #209.  4 cách để tìm bản sao trong danh sách Java  Cách tạo media player đơn giản bằng Java - 1

1. Sử dụng Bộ

Dưới đây là thuật toán tìm các phần tử trùng lặp trong Danh sách Java bằng cách sử dụng Set .
  • Chúng tôi tạo một đối tượng Java Set mới và một ArrayList mới để lưu trữ các phần tử trùng lặp.
  • Chúng tôi thực hiện một phép lặp hoặc lặp qua danh sách.
  • Chúng ta thêm từng phần tử trong danh sách vào Set bằng phương thức add() .
  • Kết quả là add() trả về true nếu phần tử đã được thêm và false nếu phần tử đã có trong Set .
  • Nếu phần tử đã có trong Set thì đó là một phần tử trùng lặp. Sau đó, chúng tôi thêm nó vào ArrayList .
  • Khi kết thúc quá trình lặp, ArrayList mới sẽ chứa tất cả các phần tử trùng lặp từ Danh sách ban đầu ( List ).
Một chương trình ví dụ dựa trên thuật toán này được hiển thị dưới đây.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Set<Integer> set = new HashSet<>();
List<Object> duplicates = new ArrayList<>();
numbers.forEach(n -> {
  if (!set.add(n)) {
    duplicates.add(n);
  }
});
System.out.println("Duplicate elements: " + duplicates);
Phần kết luận:
Các phần tử trùng lặp: [3, 1, 2]
Lưu ý rằng chúng tôi đã sử dụng phương thức forEach() để lặp qua List nhưng bạn có thể sử dụng bất kỳ phương thức nào khác.

2. Sử dụng Bản đồ

Dưới đây là các bước thuật toán cho phương pháp tìm bản sao trong Danh sách này .
  • Tạo một đối tượng Map mới và một ArrayList mới để chứa các phần tử trùng lặp.
  • Các khóa của Bản đồ này sẽ là các thành phần của Danh sách ban đầu và các giá trị của nó sẽ là số lần xuất hiện của chúng trong Danh sách .
  • Lặp qua danh sách ( List ).
  • Đối với mỗi phần tử trong Danh sách , hãy kiểm tra xem nó có tồn tại dưới dạng khóa trong Bản đồ hay không bằng phương thức containsKey() .
  • Nếu nó tồn tại, hãy tăng giá trị của nó trong Bản đồ và thêm lại bằng phương thức put() .
  • Nếu nó không tồn tại, hãy thêm nó vào Bản đồ với giá trị là 1.
  • Sau khi quá trình lặp lại danh sách hoàn tất, tất cả các thành phần Bản đồ có giá trị lớn hơn 1 sẽ trở thành bản sao.
  • Cuối cùng, lặp lại Bản đồ và thêm các phần tử có giá trị lớn hơn 1 vào danh sách để lưu trữ các phần tử trùng lặp.
Một chương trình ví dụ được hiển thị dưới đây:
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Map<Integer, Integer> countMap = new HashMap<>();
List<Object> duplicates = new ArrayList<>();
numbers.forEach(n -> {
  if (countMap.containsKey(n)) {
    countMap.put(n, countMap.get(n) + 1);
  } else {
    countMap.put(n, 1);
  }
});
countMap.keySet().forEach(k -> {
  if(countMap.get(k)> 1) {
    duplicates.add(k);
  }
});

3. Sử dụng các vòng lặp lồng nhau

Nếu bạn được yêu cầu tìm các phần tử trùng lặp trong danh sách mà không sử dụng bất kỳ lớp Bộ sưu tập nào như Set , Map , v.v. thì phương pháp này sẽ hữu ích. Các giai đoạn thuật toán:
  • Lặp qua danh sách ( List ).
  • Sau khi hoàn thành vòng lặp lần đầu tiên, hãy quay lại từ đầu và lặp lại các bước một lần nữa để tìm từng mục trong phần còn lại của danh sách.
  • Nếu phần tử vòng lặp hiện tại bằng với bất kỳ phần tử nào còn lại thì đó là một bản sao.
Một chương trình được viết bằng thuật toán này trông như thế này:
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
List<Object> duplicates = new ArrayList<>();
for (int i = 0; i < numbers.size() - 1; i++) {
  for (int j = i + 1; j < numbers.size(); j++) {
    if (numbers.get(i).equals(numbers.get(j))) {
      duplicates.add(numbers.get(i));
    }
  }
}

4. Sử dụng luồng Java

Phương thức này dựa trên các luồng Java 8 và hoạt động như thế này:
  • Chuyển đổi danh sách thành luồng .
  • Chuyển đổi luồng thành Bản đồ bằng phương thức coll() . Ví dụ: khóa từng phần tử trong danh sách và giá trị số lần xuất hiện.
  • Phương thức Collect() trả về và Map lấy Collector làm đối số. Việc triển khai Collector xác định các khóa và giá trị của Map kết quả .
  • Vì chúng ta muốn các khóa của Bản đồ là các thành phần của Danh sách các giá trị của nó là số lần xuất hiện của chúng, nên chúng ta có thể sử dụng Collectors.groupingBy() để tạo một bộ sưu tập .
  • Khi Bản đồ đã được tạo bằng cách sử dụng groupingBy() , hãy sử dụng phương thức entrySet() để lấy một tập hợp các đối tượng Map.Entry .
  • Lọc các bản ghi dựa trên giá trị (nghĩa là số lần xuất hiện) lớn hơn 1.
  • Ghép các bản ghi đã lọc với khóa của chúng.
Chương trình ví dụ:
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Map<Object, Long> map = numbers.
                        stream().
                        collect(
                          Collectors.
                          groupingBy(n -> n, Collectors.counting())
                        );
List<Object> duplicates = map.
                          entrySet().
                          stream().
                          filter(e -> e.getValue() > 1).
                          map(e -> e.getKey()).
        collect(Collectors.toList());
Phương thức groupingBy() được sử dụng để nhóm các mục trong bộ sưu tập dựa trên các tiêu chí nhất định. Đây là một ví dụ về cách hoạt động của phương pháp này:
  • Tiêu chí này được cung cấp dưới dạng biểu thức lambda vì groupingBy() lấy đối số Hàm , là một giao diện hàm.
  • Trong trường hợp này, chúng tôi nhóm theo hàm nhận dạng n -> n , có nghĩa là chúng tôi nhóm các thành phần danh sách theo giá trị của chúng.
  • Đối số thứ hai của groupingBy() là một bộ sưu tập khác chỉ định cách kết hợp các phần tử trong mỗi nhóm.
  • Ở đây chúng tôi sử dụng Collectors.counting() để tạo Bản đồ chứa số lượng từng phần tử trong danh sách.
Do đó, Bản đồ kết quả sẽ chứa số lần mỗi phần tử xuất hiện trong danh sách. Sau đó, chúng tôi lọc Bản đồ bằng phương thức filter() để tìm các phần tử có số lượng lớn hơn 1, cho biết rằng chúng là trùng lặp.

Cách tạo một trình phát đa phương tiện đơn giản bằng Java

Nguồn: Medium Hướng dẫn này sẽ giúp bạn tạo một trình phát đa phương tiện đơn giản trong Java để phát các tệp âm thanh và video. Nghỉ giải lao #209.  4 cách để tìm bản sao trong danh sách Java  Cách tạo trình phát media đơn giản bằng Java - 2Phát triển trình phát đa phương tiện có thể là một cách tuyệt vời để tìm hiểu cách sử dụng các thư viện tích hợp sẵn của Java để làm việc với các tệp phương tiện. Để hoàn thành nhiệm vụ này, chúng tôi sẽ sử dụng JavaFX và bộ công cụ Giao diện người dùng đồ họa (GUI) cho Java.

Bước 1: Thiết lập dự án

Đầu tiên, chúng ta cần thiết lập dự án Java của mình. Chúng ta sẽ sử dụng Eclipse làm IDE, nhưng bạn có thể sử dụng bất kỳ IDE nào mà bạn chọn. Tạo một dự án Java mới và đặt tên là “MediaPlayer”. Chúng tôi cũng sẽ cần thêm thư viện JavaFX vào dự án của mình. Để thực hiện việc này, hãy chuyển đến thuộc tính dự án và thêm thư viện JavaFX vào đường dẫn xây dựng của dự án.

Bước 2: Tạo giao diện người dùng

Tiếp theo chúng ta sẽ tạo giao diện người dùng cho trình phát media của mình. Nó sẽ là một giao diện người dùng đơn giản với nút phát, nút dừng và bảng trình phát đa phương tiện hiển thị tệp video hoặc âm thanh mà chúng ta muốn phát. Đối với giao diện của chúng tôi, chúng tôi sẽ sử dụng bố cục BorderPane . Bảng điều khiển trình phát đa phương tiện sẽ nằm ở giữa BorderPane và các nút phát và dừng sẽ ở cuối BorderPane. Đây là mã giao diện người dùng:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;

public class MediaPlayerApp extends Application {

    private MediaPlayer mediaPlayer;

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Media Player");

        Button playButton = new Button("Play");
        playButton.setOnAction(e -> mediaPlayer.play());

        Button stopButton = new Button("Stop");
        stopButton.setOnAction(e -> mediaPlayer.stop());

        BorderPane borderPane = new BorderPane();

        Media media = new Media("http://www.example.com/sample.mp4");
        mediaPlayer = new MediaPlayer(media);
        MediaView mediaView = new MediaView(mediaPlayer);
        borderPane.setCenter(mediaView);
        borderPane.setBottom(stopButton);
        borderPane.setRight(playButton);

        Scene scene = new Scene(borderPane, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Trong mã này, chúng tôi tạo hai nút: playButtonstopButton . Khi nút phát được nhấp vào, chúng ta gọi phương thức play() của đối tượng mediaPlayer . Khi nhấn vào nút dừng, chúng ta gọi phương thức stop() của đối tượng mediaPlayer . Chúng tôi cũng tạo một đối tượng Media với URL của tệp video mẫu và một đối tượng mediaPlayer với đối tượng Media . Cuối cùng, chúng ta tạo một đối tượng MediaView với đối tượng MediaPlayer và đặt nó làm trung tâm của BorderPane .

Bước 3. Kiểm tra trình phát media

Bây giờ chúng ta đã định cấu hình giao diện người dùng trình phát đa phương tiện, chúng ta có thể kiểm tra nó bằng cách khởi chạy ứng dụng. Khi chúng tôi khởi chạy ứng dụng, giao diện người dùng trình phát đa phương tiện sẽ xuất hiện và chúng tôi có thể nhấp vào nút phát để bắt đầu phát tệp video. Chúng ta cũng có thể nhấn vào nút dừng để dừng phát file video.

Bước 4: Thiết lập trình phát đa phương tiện của bạn

Bây giờ chúng ta đã có một trình phát đa phương tiện đang hoạt động, chúng ta có thể tùy chỉnh nó theo ý thích của mình. Chúng ta có thể thay đổi bố cục giao diện người dùng, thay đổi file video đang phát, thêm các nút bổ sung để điều chỉnh âm lượng hoặc thêm thanh tiến trình để hiển thị tiến trình của video.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION