วิธีง่ายๆ ในการจัดกลุ่มวัตถุใน Java
ที่มา: Dev.to ในตัวอย่างนี้ เราจะเรียนรู้วิธีลดความซับซ้อนของการจัดกลุ่มสำหรับ ออบเจ็กต์ แผนที่ที่มีคอลเลกชันเป็นค่า
Grouper<Integer, String> grouper = new ArrayListGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
ผลลัพธ์:
{1=[ก, ข, ค, ค], 2=[ค]}
สิ่งที่เราต้องทำคือกำหนดกลยุทธ์การจัดกลุ่ม ตัวอย่างเช่น คลาส ArrayListGrouperที่ กำหนดไว้แล้วใช้ ArrayListเป็นกลยุทธ์ เราสามารถกำหนดGrouper ใหม่ ที่จะใช้GroupingStrateg อื่น ได้ เสมอ ตอนนี้เรามาเปลี่ยนArrayListเป็นHashSetเพื่อทำให้องค์ประกอบไม่ซ้ำกัน:
public class HashSetGrouper<K, V> extends Grouper<K, V> {
public HashSetGrouper() {
super(HashSet::new);
}
}
จากนั้นเราจะทดสอบ:
@Test
public void testHashSetGrouper() {
Grouper<Integer, String> grouper = new HashSetGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
System.out.println(grouper);
}
ผลลัพธ์:
{1=[ก, ข, ค], 2=[ค]}
ตอนนี้ คีย์1มีชุดที่ไม่ซ้ำค่าc โค้ดตัวอย่างถูกโพสต์บน Github
วิธีการ charAt() - วิธีการใช้งานใน Java
ที่มา: FreeCodeCamp วิธีการcharAt()ใน Java ส่งกลับค่าของ อักขระ ถ่านในสตริงที่ดัชนีที่กำหนดหรือระบุ วันนี้เราจะมาดูวิธีการใช้เมธอดcharAt()โดยเริ่มจากไวยากรณ์ จากนั้นมาดูตัวอย่างและกรณีการใช้งานวิธีการใช้งาน Java charAt()
ไวยากรณ์สำหรับ เมธอด charAt() มีลักษณะดังนี้ :
public char charAt(int index)
โปรดทราบว่าอักขระที่ส่งคืนจากสตริงโดยใช้ เมธอด charAt()นั้น เป็น ประเภทข้อมูลchar เราจะดูว่าสิ่งนี้ส่งผลต่อการต่อค่าส่งคืนอย่างไรในอีกสักครู่ ตอนนี้เรามาดูตัวอย่าง:
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
System.out.println(greetings.charAt(0));
// H
}
}
ในโค้ดด้านบน สตริงของเราซึ่งจัดเก็บไว้ในตัวแปรที่เรียกว่าGreetingsมีข้อความว่า "Hello World" เราใช้ เมธอด charAt()เพื่อรับอักขระที่ดัชนี 0 อักขระนั้นคือตัวอักษร H อักขระตัวแรกจะอยู่ที่ดัชนี 0 เสมอ ตัวที่สองอยู่ที่ดัชนี 1 และอื่นๆ ช่องว่างระหว่างสตริงย่อยก็ถือเป็นดัชนีเช่นกัน ในตัวอย่างต่อไปนี้ เราจะดูว่าเกิดอะไรขึ้นเมื่อเราพยายามเชื่อมต่ออักขระที่ส่งคืนต่างกัน การต่อข้อมูลหมายถึงการรวมค่าตั้งแต่สองค่าขึ้นไปเข้าด้วยกัน (โดยส่วนใหญ่คำนี้จะใช้เพื่อเชื่อมต่ออักขระหรือสตริงย่อยในสตริง)
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
char ch1 = greetings.charAt(0); // H
char ch2 = greetings.charAt(4); // o
char ch3 = greetings.charAt(9); // l
char ch4 = greetings.charAt(10); // d
System.out.println(ch1 + ch2 + ch3 + ch4);
// 391
}
}
เมื่อใช้ เมธอด charAt()เราได้อักขระที่มีดัชนี 0, 4, 9 และ 10 ซึ่งเป็นตัวอักษร H, o, l และ d ตามลำดับ จากนั้นเราพยายามพิมพ์และเชื่อมต่ออักขระเหล่านี้:
System.out.println(ch1 + ch2 + ch3 + ch4);
แต่แทนที่จะส่งคืน "Hold" เราได้ 391 เนื่องจากค่าที่ส่งคืนไม่ใช่สตริงอีกต่อไป แต่เป็นประเภทchar ดังนั้นเมื่อเราเชื่อมพวกมันเข้าด้วยกัน ล่ามจะเพิ่มค่า ASCII ของมันแทน H มีค่า ASCII เท่ากับ 72, o มีค่า 111, l มีค่า 108 และ d มีค่า 100 ถ้าเราบวกพวกมันเข้าด้วยกัน เราจะได้ 391 ซึ่งถูกส่งกลับในตัวอย่างสุดท้าย
ข้อผิดพลาด StringIndexOutOfBoundsException
เมื่อเราส่งผ่านหมายเลขลำดับที่มากกว่าจำนวนอักขระในสตริงของเรา เราได้รับข้อผิดพลาด StringIndexOutOfBoundsException ในคอนโซล ข้อผิดพลาดนี้ยังใช้กับการใช้การจัดทำดัชนีเชิงลบ ซึ่ง Java ไม่รองรับ ในภาษาโปรแกรมเช่น Python ที่รองรับการจัดทำดัชนีเชิงลบ การส่ง -1 จะทำให้คุณมีอักขระหรือค่าสุดท้ายในชุดข้อมูล คล้ายกับที่ 0 ส่งคืนอักขระตัวแรกเสมอ นี่คือตัวอย่าง:
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
char ch1 = greetings.charAt(20);
System.out.println(ch1);
/* Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
*/
}
}
ในโค้ดด้านบนเราได้ผ่านดัชนี 20 แล้ว: char ch1 = Greetings.charAt(20); ซึ่งเกินจำนวนอักขระใน ตัวแปร คำทักทาย ของเรา ดังนั้นเราจึงได้รับข้อผิดพลาด คุณสามารถดูข้อความแสดงข้อผิดพลาดที่ใส่ความคิดเห็นไว้ในบล็อคโค้ดด้านบน ในทำนองเดียวกัน ถ้าเราส่งผ่านค่าลบเช่นนี้: char ch1 = Greetings.charAt(-1); จากนั้นเราได้รับข้อผิดพลาดที่คล้ายกัน
GO TO FULL VERSION