JavaRush /Blog Java /Random-PL /Przerwa kawowa #209. 4 sposoby na znalezienie duplikatów ...

Przerwa kawowa #209. 4 sposoby na znalezienie duplikatów na liście Java. Jak utworzyć prosty odtwarzacz multimediów przy użyciu języka Java

Opublikowano w grupie Random-PL

4 sposoby na znalezienie duplikatów na liście Java

Źródło: Codippa W tym artykule opisano różne sposoby znajdowania duplikatów na liście. Duplikatami nazywamy elementy, które pojawiają się więcej niż raz. Przerwa kawowa #209.  4 sposoby na znalezienie duplikatów na liście Java.  Jak stworzyć prosty odtwarzacz multimedialny przy użyciu Java - 1

1. Korzystanie z zestawu

Poniżej znajduje się algorytm znajdowania zduplikowanych elementów na liście Java za pomocą Set .
  • Tworzymy nowy obiekt Java Set i nową ArrayList do przechowywania zduplikowanych elementów.
  • Wykonujemy iterację lub pętlę po liście.
  • Każdy element listy dodajemy do Seta za pomocą metody add() .
  • W rezultacie add() zwraca wartość true , jeśli element został dodany, i false , jeśli element był już obecny w zestawie .
  • Jeśli element znajduje się już w zestawie , jest to duplikat. Następnie dodajemy go do ArrayList .
  • Na koniec iteracji nowa ArrayList będzie zawierać wszystkie zduplikowane elementy z oryginalnej Listy ( List ).
Poniżej przedstawiono przykładowy program oparty na tym algorytmie.
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);
Wniosek:
Powielone elementy: [3, 1, 2]
Zauważ, że do iteracji po liście użyliśmy metody forEach() , ale możesz użyć dowolnej innej metody.

2. Korzystanie z mapy

Poniżej znajdują się kroki algorytmu dla tej metody wyszukiwania duplikatów na liście .
  • Utwórz nowy obiekt Map i nową ArrayList do przechowywania zduplikowanych elementów.
  • Kluczami tej Mapy będą elementy oryginalnej Listy , a jej wartościami będzie liczba ich wystąpień na Liście .
  • Przejdź listę w pętli ( List ).
  • Dla każdego elementu na Liście sprawdź, czy istnieje jako klucz na Mapie , używając metody zawieraKey() .
  • Jeśli istnieje, zwiększ jego wartość na mapie i dodaj ją ponownie, używając metody put() .
  • Jeśli nie istnieje, dodaj go do Mapy z wartością 1.
  • Po zakończeniu iteracji listy wszystkie elementy mapy o wartości większej niż 1 stają się duplikatami.
  • Na koniec wykonaj iterację mapy i dodaj te elementy, których wartość jest większa niż 1, do listy, aby przechowywać zduplikowane elementy.
Przykładowy program pokazano poniżej:
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. Korzystanie z zagnieżdżonych pętli

Jeśli zostaniesz poproszony o znalezienie zduplikowanych elementów na liście bez użycia klas Collection , takich jak Set , Map itd., ta metoda będzie przydatna. Etapy algorytmu:
  • Przejdź listę w pętli ( List ).
  • Po pierwszym ukończeniu pętli wróć do początku i powtórz kroki jeszcze raz, aby znaleźć każdy element na pozostałej części listy.
  • Jeśli bieżący element pętli jest równy któremukolwiek z pozostałych elementów, jest to duplikat.
Program napisany przy użyciu tego algorytmu wygląda następująco:
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. Korzystanie ze strumienia Java

Ta metoda opiera się na wątkach Java 8 i działa w następujący sposób:
  • Konwertuj listę na strumień .
  • Przekonwertuj strumień na mapę za pomocą metody Collect() . Na przykład klucz to każdy element na liście, a wartość to liczba wystąpień.
  • Metoda Collect() zwraca wartość, a Map przyjmuje Collector jako argument. Implementacja Collectora określa klucze i wartości wynikowej Mapy .
  • Ponieważ chcemy, aby klucze Mapy były elementami Listy , a jej wartością była liczba ich wystąpień, możemy użyć Collectors.groupingBy() do utworzenia kolektora .
  • Po utworzeniu mapy za pomocą groupingBy() użyj metody EntrySet() w celu uzyskania zestawu obiektów Map.Entry .
  • Filtruj rekordy na podstawie wartości (czyli liczby wystąpień) większej niż 1.
  • Dopasuj przefiltrowane rekordy do ich kluczy.
Przykładowy program:
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());
Metoda groupingBy() służy do grupowania elementów w kolekcji na podstawie określonych kryteriów. Oto przykład działania tej metody:
  • Kryterium jest podawane w postaci wyrażenia lambda, ponieważ groupingBy() przyjmuje argument Function , który jest interfejsem funkcji.
  • W tym przypadku grupujemy według funkcji tożsamości n -> n , co oznacza, że ​​grupujemy elementy listy według ich wartości.
  • Drugi argument groupingBy() to kolejny moduł zbierający, który określa, w jaki sposób powinny być łączone elementy w każdej grupie.
  • Tutaj używamy Collectors.counting() , która tworzy mapę zawierającą liczbę każdego elementu na liście.
W rezultacie wynikowa mapa będzie zawierać informację, ile razy każdy element pojawił się na liście. Następnie filtrujemy mapę za pomocą metody filter(), aby znaleźć elementy, których liczba jest większa niż 1, co oznacza, że ​​są duplikatami.

Jak utworzyć prosty odtwarzacz multimediów przy użyciu języka Java

Źródło: Medium Ten samouczek pomoże Ci stworzyć prosty odtwarzacz multimedialny w Javie do odtwarzania plików audio i wideo. Przerwa kawowa #209.  4 sposoby na znalezienie duplikatów na liście Java.  Jak stworzyć prosty odtwarzacz multimedialny przy użyciu Java - 2Tworzenie odtwarzacza multimedialnego może być świetnym sposobem na naukę korzystania z wbudowanych bibliotek Java do pracy z plikami multimedialnymi. Aby wykonać to zadanie, użyjemy JavaFX i zestawu narzędzi graficznego interfejsu użytkownika (GUI) dla języka Java.

Krok 1: Konfiguracja projektu

Najpierw musimy skonfigurować nasz projekt Java. Będziemy używać Eclipse jako IDE, ale możesz użyć dowolnego wybranego IDE. Utwórz nowy projekt Java i nadaj mu nazwę „MediaPlayer”. Będziemy musieli także dodać do naszego projektu bibliotekę JavaFX. Aby to zrobić, przejdź do właściwości projektu i dodaj bibliotekę JavaFX do ścieżki kompilacji projektu.

Krok 2: Utwórz interfejs użytkownika

Następnie stworzymy interfejs użytkownika dla naszego odtwarzacza multimedialnego. Będzie to prosty interfejs użytkownika z przyciskiem odtwarzania, przyciskiem zatrzymania i panelem odtwarzacza multimedialnego, który wyświetla plik wideo lub audio, który chcemy odtworzyć. W naszym interfejsie użyjemy układu BorderPane . Panel odtwarzacza multimedialnego będzie znajdować się pośrodku BorderPane, a przyciski odtwarzania i zatrzymywania będą znajdować się na dole BorderPane. Oto kod interfejsu użytkownika:
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);
    }
}
W tym kodzie tworzymy dwa przyciski: playButton i stopButton . Po kliknięciu przycisku odtwarzania wywołujemy metodę play() obiektu mediaPlayer . Po kliknięciu przycisku stop wywołujemy metodę stop() obiektu mediaPlayer . Tworzymy także obiekt Media z adresem URL przykładowego pliku wideo oraz obiekt mediaPlayer z obiektem Media . Na koniec tworzymy obiekt MediaView z obiektem MediaPlayer i ustawiamy go jako środek BorderPane .

Krok 3. Testowanie odtwarzacza multimedialnego

Teraz, gdy mamy skonfigurowany interfejs odtwarzacza multimediów, możemy go przetestować, uruchamiając aplikację. Po uruchomieniu aplikacji powinien pojawić się interfejs odtwarzacza multimedialnego i możemy kliknąć przycisk odtwarzania, aby rozpocząć odtwarzanie pliku wideo. Możemy także kliknąć przycisk stop, aby zatrzymać odtwarzanie pliku wideo.

Krok 4: Konfigurowanie odtwarzacza multimedialnego

Teraz, gdy mamy działający odtwarzacz multimedialny, możemy dostosować go do własnych upodobań. Możemy zmienić układ interfejsu użytkownika, zmienić odtwarzany plik wideo, dodać dodatkowe przyciski do regulacji głośności czy dodać pasek postępu pokazujący postęp wideo.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION