คำถามติดแท็ก collections

API การรวบรวมให้นักพัฒนามีชุดของคลาสและอินเทอร์เฟซที่ทำให้ง่ายต่อการจัดการคอลเลกชันของวัตถุ

8
ลบองค์ประกอบออกจากคอลเลกชันขณะทำซ้ำ
AFAIK มีสองวิธี: ทำซ้ำสำเนาของคอลเล็กชัน ใช้ตัววนซ้ำของการรวบรวมจริง ตัวอย่างเช่น List<Foo> fooListCopy = new ArrayList<Foo>(fooList); for(Foo foo : fooListCopy){ // modify actual fooList } และ Iterator<Foo> itr = fooList.iterator(); while(itr.hasNext()){ // modify actual fooList using itr.remove() } มีเหตุผลใดที่จะชอบแนวทางหนึ่งมากกว่าอีกวิธีหนึ่ง (เช่นเลือกแนวทางแรกด้วยเหตุผลง่าย ๆ ในการอ่าน)?

12
วิธีรับมุมมองรายการแบบย้อนกลับในรายการใน Java
ฉันต้องการให้มีมุมมองรายการแบบย้อนกลับในรายการ (ในลักษณะที่คล้ายกันกว่าList#sublistให้มุมมองรายการย่อยในรายการ) มีฟังก์ชั่นที่ให้ฟังก์ชั่นนี้บ้าง? ฉันไม่ต้องการทำสำเนารายการหรือแก้ไขรายการ มันจะเพียงพอถ้าฉันได้อย่างน้อย iterator กลับรายการในกรณีนี้แม้ว่า นอกจากนี้ฉันรู้วิธีที่จะใช้ตัวเอง ฉันแค่ถามว่า Java ให้อะไรเช่นนี้แล้ว การสาธิตการใช้งาน: static <T> Iterable<T> iterableReverseList(final List<T> l) { return new Iterable<T>() { public Iterator<T> iterator() { return new Iterator<T>() { ListIterator<T> listIter = l.listIterator(l.size()); public boolean hasNext() { return listIter.hasPrevious(); } public T next() { return listIter.previous(); } public …

5
Google Guava vs. Apache Commons [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันกำลังมองหาการใช้งานแผนที่สองทิศทางใน Java และสะดุดกับทั้งสองห้องสมุด: Google Guava (เดิมชื่อ "Google Collections") Apache Commons Collections ทั้งสองฟรีใช้งานแผนที่สองทิศทางที่ฉันกำลังมองหา (BidiMap ใน Apache, BiMap ใน Google), มีขนาดเกือบจะน่าอัศจรรย์ (Apache 493 kB, Google 499 kB) [ed. ไม่จริงอีกต่อไป!] และดูเหมือน ในทุก ๆ ด้านคล้ายกับฉัน ฉันควรเลือกอันไหนและเพราะอะไร มีทางเลือกอื่นที่เทียบเท่า (ต้องฟรีและมีแผนที่สองทิศทางเป็นอย่างน้อย)? ฉันกำลังทำงานกับ Java SE ล่าสุดดังนั้นจึงไม่จำเป็นต้อง จำกัด Java 5 หรืออะไรทำนองนั้น


9
วิธีปฏิบัติที่ดีที่สุดในการตรวจสอบความถูกต้องของคอลเลกชันที่ว่างเปล่าใน Java
nullฉันต้องการที่จะตรวจสอบไม่ว่าจะเป็นคอลเลกชันที่ว่างเปล่าและ ใครช่วยได้โปรดแจ้งให้ฉันทราบวิธีปฏิบัติที่ดีที่สุด ขณะนี้ฉันกำลังตรวจสอบด้านล่าง: if (null == sampleMap || sampleMap.isEmpty()) { // do something } else { // do something else }
210 java  collections 

7
ข้อใดมีประสิทธิภาพมากขึ้นสำหรับแต่ละลูปหรือตัววนซ้ำ
วิธีใดมีประสิทธิภาพมากที่สุดในการสำรวจชุดสะสม List<Integer> a = new ArrayList<Integer>(); for (Integer integer : a) { integer.toString(); } หรือ List<Integer> a = new ArrayList<Integer>(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = (Integer) iterator.next(); integer.toString(); } โปรดทราบว่านี้ไม่ได้เป็นที่แน่นอนซ้ำของนี้ , นี้ , นี้หรือนี้แม้ว่าหนึ่งในคำตอบของคำถามที่ผ่านมาใกล้เคียง เหตุผลที่นี่ไม่ใช่การล่อลวงเพราะส่วนใหญ่เป็นการเปรียบเทียบลูปที่คุณโทรget(i)ภายในลูปแทนที่จะใช้ตัววนซ้ำ ตามที่แนะนำในMetaฉันจะโพสต์คำตอบของคำถามนี้


28
มีวิธีรับโมเดลทั้งหมดในแอพ Rails ของคุณหรือไม่?
มีวิธีที่คุณจะได้รับชุดโมเดลทั้งหมดในแอพ Rails ของคุณหรือไม่? โดยทั่วไปฉันสามารถทำสิ่งที่ชอบของ: - Models.each do |model| puts model.class.name end

8
ลบ Integer ออกจากรายการ <Integer> อย่างถูกต้อง
นี่เป็นข้อผิดพลาดที่ดีที่ฉันเพิ่งพบ พิจารณารายการจำนวนเต็ม: List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;(); list.add(5); list.add(6); list.add(7); list.add(1); มีการเดาอะไรเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณดำเนินการlist.remove(1)? เกี่ยวกับlist.remove(new Integer(1))อะไร สิ่งนี้อาจทำให้เกิดข้อบกพร่องที่น่ารังเกียจ อะไรคือวิธีที่เหมาะสมในการแยกความแตกต่างระหว่างremove(int index)ซึ่งเอาองค์ประกอบจากดัชนีที่กำหนดและremove(Object o)ที่เอาองค์ประกอบโดยอ้างอิงเมื่อจัดการกับรายการของจำนวนเต็ม? ประเด็นหลักที่ต้องพิจารณาที่นี่คือหนึ่งใน@Nikita ที่กล่าวถึง - การจับคู่พารามิเตอร์ที่แน่นอนจะมีความสำคัญเหนือกว่ามวยอัตโนมัติ

10
รายการของ Kotlin หายไป“ เพิ่ม”,“ ลบ”, แผนที่ขาดหายไป“ ใส่” ฯลฯ ?
ใน Java เราสามารถทำสิ่งต่อไปนี้ public class TempClass { List&lt;Integer&gt; myList = null; void doSomething() { myList = new ArrayList&lt;&gt;(); myList.add(10); myList.remove(10); } } แต่ถ้าเราเขียนมันใหม่เพื่อ Kotlin โดยตรงดังต่อไปนี้ class TempClass { var myList: List&lt;Int&gt;? = null fun doSomething() { myList = ArrayList&lt;Int&gt;() myList!!.add(10) myList!!.remove(10) } } ฉันพบข้อผิดพลาดในการไม่ค้นหาaddและremoveฟังก์ชั่นจากรายการของฉัน ฉันหลีกเลี่ยงการร่ายไปยัง ArrayList แต่มันก็แปลกที่ต้องใช้ในการร่ายขณะที่ไม่จำเป็นต้องใช้การคัดเลือก Java และนั่นก็เอาชนะวัตถุประสงค์ของการมีลิสต์คลาสนามธรรม class …

8
คิวที่ จำกัด ขนาดที่มีองค์ประกอบ N สุดท้ายใน Java
คำถามที่ง่ายและรวดเร็วมากเกี่ยวกับห้องสมุด Java: มีคลาสสำเร็จรูปที่ใช้งานQueueกับขนาดสูงสุดคงที่ - คือมันอนุญาตให้เพิ่มองค์ประกอบได้เสมอ แน่นอนว่ามันเป็นเรื่องเล็กน้อยที่จะใช้งานด้วยตนเอง: import java.util.LinkedList; public class LimitedQueue&lt;E&gt; extends LinkedList&lt;E&gt; { private int limit; public LimitedQueue(int limit) { this.limit = limit; } @Override public boolean add(E o) { super.add(o); while (size() &gt; limit) { super.remove(); } return true; } } เท่าที่ฉันเห็นไม่มีมาตรฐานการใช้งานใน Java stdlibs แต่อาจมีหนึ่งใน Apache Commons หรืออะไรแบบนั้น
198 collections  queue  java 

17
แปลง JSON เป็น Map
วิธีที่ดีที่สุดในการแปลงรหัส JSON คือ: { "data" : { "field1" : "value1", "field2" : "value2" } } ใน Java Map ซึ่งหนึ่งในคีย์คือ (field1, field2) และค่าสำหรับฟิลด์เหล่านั้นคือ (value1, value2) ความคิดใด ๆ ฉันควรใช้ Json-lib เพื่อสิ่งนั้นหรือไม่? หรือดีกว่าถ้าฉันเขียน parser ของตัวเอง?


4
Java 8 Stream.collect ใดที่มีอยู่ในไลบรารี Kotlin มาตรฐาน
ใน Java 8 มีการStream.collectอนุญาตให้รวมตัวกันบนคอลเลกชัน ใน Kotlin สิ่งนี้ไม่ได้อยู่ในลักษณะเดียวกันนอกเหนือไปจากบางทีอาจเป็นชุดของฟังก์ชันส่วนขยายใน stdlib แต่มันไม่ชัดเจนว่าการเทียบเคียงสำหรับกรณีการใช้งานที่แตกต่างกันอย่างไร ตัวอย่างเช่นที่ด้านบนของ JavaDoc สำหรับCollectorsเป็นตัวอย่างที่เขียนขึ้นสำหรับ Java 8 และเมื่อย้ายไปยัง Kolin คุณจะไม่สามารถใช้คลาส Java 8 เมื่ออยู่ในรุ่น JDK ที่แตกต่างกันดังนั้นจึงเป็นไปได้ว่าพวกเขาควรจะเขียนต่างกัน ในแง่ของทรัพยากรออนไลน์แสดงตัวอย่างของคอลเลกชัน Kotlin พวกเขามักจะเล็กน้อยและไม่ได้เปรียบเทียบกับกรณีการใช้งานที่เหมือนกัน มีตัวอย่างที่ดีอะไรบ้างที่ตรงกับเคสเช่นเอกสารสำหรับ Java 8 Stream.collect? รายการมี: สะสมชื่อลงในรายการ สะสมชื่อลงใน TreeSet แปลงองค์ประกอบเป็นสตริงและเชื่อมต่อพวกเขาคั่นด้วยเครื่องหมายจุลภาค คำนวณผลรวมของเงินเดือนของพนักงาน จัดกลุ่มพนักงานตามแผนก คำนวณยอดรวมเงินเดือนตามแผนก แบ่งนักเรียนให้ผ่านและไม่ผ่าน ด้วยรายละเอียดใน JavaDoc ที่ลิงค์ด้านบน หมายเหตุ: คำถามนี้เขียนโดยเจตนาและตอบโดยผู้เขียน ( คำถามที่ตอบด้วยตนเอง ) ดังนั้นคำตอบที่เป็นไปตามหัวข้อ Kotlin ที่ถูกถามบ่อยนั้นมีอยู่ใน SO …

11
แปลงรายการ <DerivedClass> เป็น List <BaseClass>
ในขณะที่เราสามารถสืบทอดจากคลาสพื้นฐาน / อินเทอร์เฟซทำไมเราไม่ประกาศList&lt;&gt; โดยใช้คลาส / อินเทอร์เฟซเดียวกัน interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List&lt;A&gt; listOfA = new List&lt;C&gt;(); // compiler Error } } มีวิธีแก้ไขไหม?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.