JavaRush /Java Blog /Random-TL /Coffee break #209. 4 na Paraan para Maghanap ng mga Dupli...

Coffee break #209. 4 na Paraan para Maghanap ng mga Duplicate sa Listahan ng Java. Paano Gumawa ng Simple Media Player Gamit ang Java

Nai-publish sa grupo

4 na Paraan para Maghanap ng mga Duplicate sa Listahan ng Java

Pinagmulan: Codippa Sinasaklaw ng artikulong ito ang iba't ibang paraan upang maghanap ng mga duplicate sa isang Listahan. Tinatawag namin ang mga duplicate na elemento na lumilitaw nang higit sa isang beses. Coffee break #209.  4 na Paraan para Maghanap ng mga Duplicate sa Listahan ng Java.  Paano lumikha ng isang simpleng media player gamit ang Java - 1

1. Gamit ang Set

Nasa ibaba ang isang algorithm upang makahanap ng mga duplicate na elemento sa isang Java List gamit ang Set .
  • Lumilikha kami ng bagong object ng Java Set at isang bagong ArrayList upang mag-imbak ng mga duplicate na elemento.
  • Nagsasagawa kami ng isang pag-ulit o pag-ikot sa listahan.
  • Idinaragdag namin ang bawat elemento sa listahan sa Set gamit ang add() method .
  • Bilang resulta, ang add() ay nagbabalik ng true kung ang elemento ay idinagdag, at false kung ang elemento ay naroroon na sa Set .
  • Kung ang elemento ay nasa Set na , isa itong duplicate. Pagkatapos ay idinagdag namin ito sa ArrayList .
  • Sa pagtatapos ng pag-ulit, ang bagong ArrayList ay maglalaman ng lahat ng mga dobleng elemento mula sa orihinal na Listahan ( List ).
Ang isang halimbawang programa batay sa algorithm na ito ay ipinapakita sa ibaba.
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);
Konklusyon:
Mga dobleng elemento: [3, 1, 2]
Tandaan na ginamit namin ang paraang forEach() upang umulit sa List , ngunit maaari kang gumamit ng anumang iba pang paraan.

2. Paggamit ng Mapa

Nasa ibaba ang mga hakbang sa algorithm para sa pamamaraang ito ng paghahanap ng mga duplicate sa isang Listahan .
  • Gumawa ng bagong Map object at isang bagong ArrayList na maghahawak ng mga duplicate na elemento.
  • Ang mga susi ng Map na ito ay ang mga elemento ng orihinal na Listahan , at ang mga halaga nito ay ang bilang ng kanilang mga paglitaw sa Listahan .
  • Umikot sa listahan ( Listahan ).
  • Para sa bawat elemento sa List , suriin kung ito ay umiiral bilang isang susi sa Map gamit ang containsKey() method .
  • Kung mayroon ito, dagdagan ang halaga nito sa Map at idagdag itong muli gamit ang put() method .
  • Kung wala ito, idagdag ito sa Map na may value na 1.
  • Kapag nakumpleto na ang pag-ulit ng listahan, lahat ng elemento ng Map na may value na mas malaki sa 1 ay magiging duplicate.
  • Panghuli, ulitin ang Map at idagdag ang mga elementong iyon na ang halaga ay mas malaki sa 1 sa isang listahan upang mag-imbak ng mga duplicate na elemento.
Ang isang halimbawang programa ay ipinapakita sa ibaba:
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. Paggamit ng nested loops

Kung hihilingin sa iyong maghanap ng mga duplicate na elemento sa isang listahan nang hindi gumagamit ng anumang klase ng Collection tulad ng Set , Map at iba pa, magiging kapaki-pakinabang ang paraang ito. Mga yugto ng algorithm:
  • Umikot sa listahan ( Listahan ).
  • Matapos makumpleto ang loop sa unang pagkakataon, bumalik sa simula at ulitin muli ang mga hakbang upang mahanap ang bawat item sa natitirang bahagi ng listahan.
  • Kung ang kasalukuyang elemento ng loop ay katumbas ng alinman sa mga natitirang elemento, ito ay isang duplicate.
Ang isang program na nakasulat gamit ang algorithm na ito ay ganito ang hitsura:
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. Paggamit ng Java Stream

Ang pamamaraang ito ay batay sa Java 8 na mga thread at gumagana tulad nito:
  • I-convert ang Listahan sa Stream .
  • I-convert ang stream sa isang Map gamit ang collect() method . Halimbawa, ang susi ay ang bawat elemento sa listahan, at ang halaga ay ang bilang ng mga paglitaw.
  • Ang collect() method ay bumabalik at ang Map ay kinuha ang Collector bilang argumento. Tinutukoy ng pagpapatupad ng Collector ang mga susi at halaga ng nagreresultang Map .
  • Dahil gusto naming ang mga susi ng Map ay mga elemento ng isang Listahan at ang mga halaga nito ay ang bilang ng mga paglitaw ng mga ito, maaari naming gamitin ang Collectors.groupingBy() upang lumikha ng isang collector .
  • Kapag nagawa na ang Map gamit ang groupingBy() , gamitin ang entrySet() method para makakuha ng set ng Map.Entry objects .
  • I-filter ang mga tala batay sa isang halaga (iyon ay, bilang ng mga paglitaw) na higit sa 1.
  • Itugma ang mga na-filter na tala sa kanilang mga susi.
Halimbawa ng programa:
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());
Ang paraan ng groupingBy() ay ginagamit upang pangkatin ang mga item sa isang koleksyon batay sa ilang pamantayan. Narito ang isang halimbawa kung paano gumagana ang pamamaraang ito:
  • Ang criterion ay ibinigay bilang lambda expression dahil ang groupingBy() ay tumatagal ng isang Function argument , na isang function na interface.
  • Sa kasong ito, pinapangkat namin ayon sa function ng pagkakakilanlan n -> n , na nangangahulugang pinapangkat namin ang mga elemento ng listahan ayon sa kanilang mga halaga.
  • Ang pangalawang argumento sa groupingBy() ay isa pang kolektor na tumutukoy kung paano dapat pagsamahin ang mga elemento sa bawat pangkat.
  • Dito ginagamit namin ang Collectors.counting() na lumilikha ng isang Map na naglalaman ng bilang ng bawat elemento sa listahan.
Bilang resulta, maglalaman ang magreresultang Map ng bilang kung ilang beses lalabas ang bawat elemento sa listahan. Pagkatapos ay i-filter namin ang Map gamit ang filter() na paraan upang mahanap ang mga elemento na ang bilang ay higit sa 1, na nagpapahiwatig na sila ay mga duplicate.

Paano Gumawa ng Simple Media Player Gamit ang Java

Source: Medium Tutulungan ka ng tutorial na ito na lumikha ng isang simpleng media player sa Java upang mag-play ng mga audio at video file. Coffee break #209.  4 na Paraan para Maghanap ng mga Duplicate sa Listahan ng Java.  Paano lumikha ng isang simpleng media player gamit ang Java - 2Ang pagbuo ng isang media player ay maaaring maging isang mahusay na paraan upang matutunan kung paano gamitin ang mga built-in na library ng Java upang gumana sa mga media file. Upang magawa ang gawaing ito, gagamitin namin ang JavaFX at ang toolkit ng Graphical User Interface (GUI) para sa Java.

Hakbang 1: Pag-setup ng Proyekto

Una, kailangan naming i-set up ang aming proyekto sa Java. Gagamitin namin ang Eclipse bilang IDE, ngunit maaari mong gamitin ang anumang IDE na gusto mo. Gumawa ng bagong proyekto sa Java at pangalanan itong "MediaPlayer". Kakailanganin din naming idagdag ang library ng JavaFX sa aming proyekto. Upang gawin ito, pumunta sa mga property ng proyekto at idagdag ang JavaFX library sa build path ng proyekto.

Hakbang 2: Lumikha ng User Interface

Susunod na gagawin namin ang user interface para sa aming media player. Ito ay magiging isang simpleng user interface na may play button, stop button at media player panel na nagpapakita ng video o audio file na gusto naming i-play. Para sa aming interface gagamitin namin ang BorderPane layout . Ang panel ng media player ay nasa gitna ng BorderPane, at ang play at stop button ay nasa ibaba ng BorderPane. Narito ang UI code:
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);
    }
}
Sa code na ito, gumawa kami ng dalawang button: playButton at stopButton . Kapag na-click ang play button, tinatawag namin ang play() method ng mediaPlayer object . Kapag na-click ang stop button, tinatawag namin ang stop() method ng mediaPlayer object . Gumagawa din kami ng Media object na may URL ng halimbawang video file at isang mediaPlayer object na may Media object . Sa wakas, gumawa kami ng MediaView object na may MediaPlayer object at itinakda ito bilang sentro ng BorderPane .

Hakbang 3. Pagsubok sa media player

Ngayong na-configure na natin ang UI ng media player, masusubok natin ito sa pamamagitan ng paglulunsad ng application. Kapag inilunsad namin ang application, dapat na lumitaw ang media player UI at maaari naming i-click ang play button upang simulan ang pag-play ng video file. Maaari rin naming i-click ang stop button upang ihinto ang pag-play ng video file.

Hakbang 4: Pagse-set up ng iyong media player

Ngayon na mayroon na kaming gumaganang media player, maaari naming i-customize ito ayon sa gusto namin. Maaari naming baguhin ang layout ng user interface, baguhin ang video file na nilalaro, magdagdag ng mga karagdagang button upang ayusin ang volume, o magdagdag ng progress bar upang ipakita ang pag-usad ng video.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION