JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #209. 4 วิธีในการค้นหารายการที่ซ้ำกันในรายการ ...

คอฟฟี่เบรค #209. 4 วิธีในการค้นหารายการที่ซ้ำกันในรายการ Java วิธีสร้าง Media Player อย่างง่ายโดยใช้ Java

เผยแพร่ในกลุ่ม

4 วิธีในการค้นหารายการที่ซ้ำกันในรายการ Java

ที่มา: Codippa บทความนี้ครอบคลุมวิธีการต่างๆ ในการค้นหารายการที่ซ้ำกันในรายการ เราเรียกองค์ประกอบที่ซ้ำกันที่ปรากฏมากกว่าหนึ่งครั้ง คอฟฟี่เบรค #209.  4 วิธีในการค้นหารายการที่ซ้ำกันในรายการ Java  วิธีสร้างเครื่องเล่นสื่ออย่างง่ายโดยใช้ Java - 1

1. การใช้ชุด

ด้านล่างนี้เป็นอัลกอริทึมในการค้นหาองค์ประกอบที่ ซ้ำกันในรายการ Java โดยใช้Set
  • เราสร้างวัตถุ Java Set ใหม่ และArrayList ใหม่ เพื่อจัดเก็บองค์ประกอบที่ซ้ำกัน
  • เราดำเนินการวนซ้ำหรือวนซ้ำรายการ
  • เราเพิ่มแต่ละองค์ประกอบในรายการไปยังSetโดยใช้ วิธี add( )
  • ผลที่ได้คือadd()จะคืนค่าเป็นจริงหากมีการเพิ่มองค์ประกอบนั้น และ จะ ส่ง คืน ค่าเป็นเท็จหากมีองค์ประกอบนั้นอยู่ในSet อยู่แล้ว
  • หากองค์ประกอบมีอยู่แล้วในSetองค์ประกอบนั้นจะซ้ำกัน จากนั้นเราก็เพิ่มมันเข้าไปในArrayList
  • เมื่อสิ้นสุดการวนซ้ำArrayList ใหม่ จะมีองค์ประกอบที่ซ้ำกันทั้งหมดจากรายการดั้งเดิม ( List )
ตัวอย่างโปรแกรมที่ใช้อัลกอริทึมนี้แสดงอยู่ด้านล่าง
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);
บทสรุป:
องค์ประกอบที่ซ้ำกัน: [3, 1, 2]
โปรดทราบว่าเราใช้ เมธอด forEach() เพื่อวนซ้ำผ่าน Listแต่คุณสามารถใช้วิธีอื่นก็ได้

2. การใช้แผนที่

ด้านล่างนี้เป็นขั้นตอนอัลกอริธึมสำหรับวิธีการค้นหารายการที่ซ้ำกันในรายการ
  • สร้าง วัตถุ แผนที่ ใหม่ และArrayList ใหม่ เพื่อเก็บองค์ประกอบที่ซ้ำกัน
  • คีย์ของแผนที่ นี้ จะเป็นองค์ประกอบของรายการดั้งเดิมและค่าของมันจะเป็นจำนวนครั้งที่เกิดขึ้นในรายการ
  • วนซ้ำรายการ ( List )
  • สำหรับแต่ละองค์ประกอบในรายการให้ตรวจสอบว่ามีอยู่เป็นคีย์ในแผนที่ หรือ ไม่โดยใช้ เมธอด containsKey()
  • หากมีอยู่ ให้เพิ่มค่าในแผนที่และเพิ่มอีกครั้งโดยใช้ เมธอด put ( )
  • หากไม่มีอยู่ ให้เพิ่มลงในแผนที่ด้วยค่า 1
  • เมื่อการวนซ้ำรายการเสร็จสมบูรณ์ องค์ประกอบแผนที่ ทั้งหมด ที่มีค่ามากกว่า 1 จะกลายเป็นรายการที่ซ้ำกัน
  • สุดท้าย วนซ้ำแผนที่และเพิ่มองค์ประกอบที่มีค่ามากกว่า 1 ลงในรายการเพื่อจัดเก็บองค์ประกอบที่ซ้ำกัน
โปรแกรมตัวอย่างแสดงไว้ด้านล่าง:
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. การใช้ลูปที่ซ้อนกัน

หากคุณถูกขอให้ค้นหาองค์ประกอบที่ซ้ำกันในรายการโดยไม่ต้องใช้ คลาส Collection ใด ๆ เช่นSet , Mapเป็นต้น วิธีการนี้จะมีประโยชน์ ขั้นตอนอัลกอริทึม:
  • วนซ้ำรายการ ( List )
  • หลังจากที่วนซ้ำเสร็จสิ้นในครั้งแรก ให้กลับไปที่จุดเริ่มต้นและทำซ้ำขั้นตอนอีกครั้งเพื่อค้นหาแต่ละรายการในส่วนที่เหลือของรายการ
  • หากองค์ประกอบลูปปัจจุบันเท่ากับองค์ประกอบที่เหลือ องค์ประกอบนั้นจะซ้ำกัน
โปรแกรมที่เขียนโดยใช้อัลกอริธึมนี้มีลักษณะดังนี้:
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. การใช้จาวาสตรีม

วิธีการนี้ใช้เธรด Java 8 และทำงานดังนี้:
  • แปลงรายการเป็นสตรี
  • แปลงสตรีมเป็นแผนที่โดยใช้ เมธอด collect( ) ตัวอย่างเช่น key คือแต่ละองค์ประกอบในรายการ และ value คือจำนวนครั้งที่เกิดขึ้น
  • เมธอดcollect()ส่งคืนและMapรับCollectorเป็นอาร์กิวเมนต์ การใช้งานCollector จะกำหนดคีย์และค่าของผลลัพธ์Map
  • เนื่องจากเราต้องการให้ คีย์ ของ Mapเป็นองค์ประกอบของ List และค่าของคีย์นั้นเป็นจำนวนครั้งที่เกิดขึ้น เราจึงสามารถใช้Collectors.groupingBy() เพื่อสร้าง Collector ได้
  • เมื่อแผนที่ถูกสร้างขึ้นโดยใช้groupingBy()ให้ใช้เมธอดentrySet()เพื่อรับชุดของ วัตถุ Map.Entry
  • กรองบันทึกตามค่า (นั่นคือ จำนวนครั้ง) ที่มากกว่า 1
  • จับคู่บันทึกที่กรองกับคีย์
โปรแกรมตัวอย่าง:
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());
เมธอดgroupingBy()ใช้เพื่อจัดกลุ่มรายการในคอลเลกชันตามเกณฑ์ที่กำหนด นี่คือตัวอย่างวิธีการทำงานของวิธีนี้:
  • เกณฑ์ถูกระบุเป็นนิพจน์แลมบ์ดาเนื่องจากgroupingBy()รับ อาร์กิวเมนต์ Functionซึ่งเป็นอินเทอร์เฟซของฟังก์ชัน
  • ในกรณีนี้ เราจัดกลุ่มตามฟังก์ชันเอกลักษณ์n -> nซึ่งหมายความว่าเราจัดกลุ่มองค์ประกอบรายการตามค่าของมัน
  • อาร์กิวเมนต์ที่สองของ groupingBy()เป็นตัวรวบรวมอีกตัวหนึ่งที่ระบุวิธีการรวมองค์ประกอบในแต่ละกลุ่ม
  • ที่นี่เราใช้Collectors.counting()ซึ่งสร้างแผนที่ที่มีการนับของแต่ละองค์ประกอบในรายการ
ผลที่ได้คือแผนที่ ที่ได้ จะมีการนับจำนวนครั้งที่แต่ละองค์ประกอบปรากฏในรายการ จากนั้นเรากรองแผนที่โดยใช้ เมธอด filter()เพื่อค้นหาองค์ประกอบที่มีจำนวนมากกว่า 1 ซึ่งบ่งชี้ว่าองค์ประกอบเหล่านั้นซ้ำกัน

วิธีสร้าง Media Player อย่างง่ายโดยใช้ Java

ที่มา: ปานกลาง บท ช่วยสอนนี้จะช่วยคุณสร้างเครื่องเล่นสื่ออย่างง่ายใน Java เพื่อเล่นไฟล์เสียงและวิดีโอ คอฟฟี่เบรค #209.  4 วิธีในการค้นหารายการที่ซ้ำกันในรายการ Java  วิธีสร้างเครื่องเล่นสื่ออย่างง่ายโดยใช้ Java - 2การพัฒนาเครื่องเล่นสื่ออาจเป็นวิธีที่ดีในการเรียนรู้วิธีใช้ไลบรารีในตัวของ Java เพื่อทำงานกับไฟล์มีเดีย เพื่อให้งานนี้สำเร็จ เราจะใช้ JavaFX และชุดเครื่องมือ Graphical User Interface (GUI) สำหรับ Java

ขั้นตอนที่ 1: การตั้งค่าโครงการ

ก่อนอื่น เราต้องตั้งค่าโปรเจ็กต์ Java ของเราก่อน เราจะใช้ Eclipse เป็น IDE แต่คุณสามารถใช้ IDE ใดก็ได้ตามที่คุณต้องการ สร้างโครงการ Java ใหม่และตั้งชื่อว่า "MediaPlayer" เราจะต้องเพิ่มไลบรารี JavaFX ให้กับโปรเจ็กต์ของเราด้วย หากต้องการทำสิ่งนี้ ให้ไปที่คุณสมบัติของโปรเจ็กต์และเพิ่มไลบรารี JavaFX ให้กับพาธการ build ของโปรเจ็กต์

ขั้นตอนที่ 2: สร้างส่วนต่อประสานผู้ใช้

ต่อไปเราจะสร้างส่วนต่อประสานผู้ใช้สำหรับเครื่องเล่นสื่อของเรา มันจะเป็นอินเทอร์เฟซผู้ใช้ที่เรียบง่ายพร้อมปุ่มเล่น ปุ่มหยุด และแผงเครื่องเล่นสื่อที่แสดงไฟล์วิดีโอหรือเสียงที่เราต้องการเล่น สำหรับอิน เทอร์เฟซของเรา เราจะใช้เค้าโครง BorderPane แผงเครื่องเล่นสื่อจะอยู่ตรงกลางของ BorderPane และปุ่มเล่นและหยุดจะอยู่ที่ด้านล่างของ BorderPane นี่คือรหัส UI:
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);
    }
}
ในโค้ดนี้ เราสร้างปุ่มสองปุ่ม: playButtonและstopButton เมื่อคลิกปุ่มเล่น เราจะเรียก เมธอด play ( ) ของ อ็อบเจ็กต์mediaPlayer เมื่อคลิกปุ่มหยุด เราจะเรียกเมธอด stop ( ) ของ วัตถุmediaPlayer นอกจากนี้เรายังสร้าง ออบเจ็กต์ Mediaด้วย URL ของไฟล์วิดีโอตัวอย่างและ ออบ เจ็ กต์ mediaPlayerด้วย ออบเจ็กต์ Media สุดท้ายนี้ เราสร้างวัตถุ MediaViewด้วย วัตถุ MediaPlayerและตั้งให้เป็นศูนย์กลางของ BorderPane

ขั้นตอนที่ 3 ทดสอบเครื่องเล่นสื่อ

ตอนนี้เราได้กำหนดค่า UI ของเครื่องเล่นสื่อแล้ว เราสามารถทดสอบได้โดยเปิดแอปพลิเคชัน เมื่อเราเปิดแอปพลิเคชัน UI ของเครื่องเล่นสื่อควรปรากฏขึ้นและเราสามารถคลิกปุ่มเล่นเพื่อเริ่มเล่นไฟล์วิดีโอได้ นอกจากนี้เรายังสามารถคลิกปุ่มหยุดเพื่อหยุดเล่นไฟล์วิดีโอได้

ขั้นตอนที่ 4: การตั้งค่าเครื่องเล่นสื่อของคุณ

ตอนนี้เรามีเครื่องเล่นสื่อที่ใช้งานได้แล้ว เราสามารถปรับแต่งมันได้ตามต้องการ เราสามารถเปลี่ยนเค้าโครงอินเทอร์เฟซผู้ใช้ เปลี่ยนไฟล์วิดีโอที่กำลังเล่น เพิ่มปุ่มเพิ่มเติมเพื่อปรับระดับเสียง หรือเพิ่มแถบความคืบหน้าเพื่อแสดงความคืบหน้าของวิดีโอ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION