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

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

6
การใช้สตรีมเพื่อรวบรวมลงใน TreeSet ด้วยตัวเปรียบเทียบแบบกำหนดเอง
การทำงานใน Java 8 ฉันได้TreeSetกำหนดไว้ดังนี้: private TreeSet<PositionReport> positionReports = new TreeSet<>(Comparator.comparingLong(PositionReport::getTimestamp)); PositionReport เป็นคลาสที่ค่อนข้างง่ายที่กำหนดไว้เช่นนี้: public static final class PositionReport implements Cloneable { private final long timestamp; private final Position position; public static PositionReport create(long timestamp, Position position) { return new PositionReport(timestamp, position); } private PositionReport(long timestamp, Position position) { this.timestamp = timestamp; …

8
ฉันจะทำให้ ArrayList Thread-Safe ได้อย่างไร แนวทางอื่นในการแก้ปัญหาใน Java?
ฉันมี ArrayList ที่ฉันต้องการใช้เพื่อเก็บวัตถุ RaceCar ที่ขยายคลาสเธรดทันทีที่ดำเนินการเสร็จสิ้น คลาสที่เรียกว่า Race จะจัดการ ArrayList นี้โดยใช้วิธีการเรียกกลับที่อ็อบเจ็กต์ RaceCar เรียกใช้เมื่อดำเนินการเสร็จสิ้น วิธีการโทรกลับ addFinisher (RaceCar finisher) เพิ่มวัตถุ RaceCar ไปยัง ArrayList สิ่งนี้ควรจะให้ลำดับที่เธรดดำเนินการเสร็จสิ้น ฉันรู้ว่า ArrayList ไม่ซิงโครไนซ์ดังนั้นจึงไม่ปลอดภัยต่อเธรด ฉันลองใช้เมธอด Collections.synchronizedCollection (c Collection) โดยส่ง ArrayList ใหม่และกำหนด Collection ที่ส่งคืนไปยัง ArrayList อย่างไรก็ตามสิ่งนี้ทำให้ฉันมีข้อผิดพลาดของคอมไพเลอร์: Race.java:41: incompatible types found : java.util.Collection required: java.util.ArrayList finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); นี่คือรหัสที่เกี่ยวข้อง: public class …


8
เหตุใด ReadOnlyObservableCollection.CollectionChanged จึงไม่เป็นสาธารณะ
เหตุใดจึงReadOnlyObservableCollection.CollectionChangedได้รับการคุ้มครองและไม่เปิดเผยต่อสาธารณะ (ตามที่เกี่ยวข้องObservableCollection.CollectionChanged) การใช้คอลเลกชันจะใช้อะไรINotifyCollectionChangedหากฉันไม่สามารถเข้าถึงCollectionChangedเหตุการณ์ได้?
88 c#  .net  collections 


11
มีการใช้งานรายการที่ไม่ซ้ำกันหรือไม่?
ฉันรู้เกี่ยวกับSortedSetแต่ในกรณีของฉันฉันต้องการสิ่งที่นำไปปฏิบัติและไม่List Setดังนั้นจึงมีการนำไปใช้งานใน API หรือที่อื่น ๆ หรือไม่? ไม่น่าจะยากที่จะนำไปใช้เอง แต่ฉันคิดว่าทำไมไม่ถามคนที่นี่ก่อน

4
มีอะไรเช่น Asynchronous BlockingCollection <T> หรือไม่?
ฉันต้องการawaitผลลัพธ์ของBlockingCollection&lt;T&gt;.Take()แบบอะซิงโครนัสดังนั้นฉันจึงไม่บล็อกเธรด กำลังมองหาอะไรเช่นนี้: var item = await blockingCollection.TakeAsync(); ฉันรู้ว่าฉันทำได้: var item = await Task.Run(() =&gt; blockingCollection.Take()); แต่นั่นเป็นการฆ่าความคิดทั้งหมดเพราะเธรดอื่นThreadPoolถูกบล็อกแทน มีทางเลือกอื่นไหม

7
มีลำดับการเก็บรักษา Set ที่ใช้รายการด้วยหรือไม่
ฉันกำลังพยายามค้นหาการนำไปใช้java.util.Listและjava.util.Setในเวลาเดียวกันใน Java ฉันต้องการให้คลาสนี้อนุญาตเฉพาะองค์ประกอบที่ไม่ซ้ำกัน (เป็นSet) และรักษาลำดับของพวกเขา (เช่นList) มีอยู่ใน JDK 6 หรือไม่? สิ่งสำคัญคือต้องมีList&lt;T&gt;#add(int, T)เพื่อให้ฉันสามารถแทรกลงในตำแหน่งเฉพาะได้
85 java  collections 

8
วิธีการนับทรัพย์สินเทียบกับจำนวน ()?
การทำงานกับคอลเลกชันฉันมีสองวิธีในการนับวัตถุ Count(คุณสมบัติ) และCount()(วิธีการ) ไม่มีใครรู้ว่าความแตกต่างที่สำคัญคืออะไร? ฉันอาจจะผิด แต่ฉันมักจะใช้Countคุณสมบัติในคำสั่งเงื่อนไขใด ๆ เพราะฉันสมมติว่าCount()เมธอดใช้แบบสอบถามบางประเภทกับคอลเลกชันโดยที่Countต้องได้รับมอบหมายก่อนที่ฉันจะ 'รับ' แต่นั่นเป็นการเดา - ฉันไม่รู้ว่าประสิทธิภาพจะได้รับผลกระทบหรือไม่ถ้าฉันผิด แก้ไข: ด้วยความอยากรู้อยากเห็นจะทำให้Count()เกิดข้อยกเว้นหากคอลเล็กชันเป็นโมฆะ? เพราะฉันค่อนข้างมั่นใจว่าCountคุณสมบัติจะคืนค่าเป็น 0
85 c#  linq  list  collections  count 

2
ทำไม EnumMap ไม่ใช่ SortedMap ใน Java?
EnumMap&lt;K extends Enum&lt;K&gt;, V&gt; ใน Java ถูกจัดเรียงอย่างชัดเจนโดยนิยามของ enum ที่เกี่ยวข้องอย่างที่คุณเห็นใน javadoc: แผนที่ Enum นั้นได้รับการบำรุงรักษาตามลำดับของกุญแจ (ตามลำดับที่ประกาศค่าคงที่ Enum) นี่คือภาพสะท้อนใน iterators กลับโดยมุมมองที่คอลเลกชัน ( keySet(), entrySet()และvalues()) สิ่งที่ฉันต้องการคือการSortedMapใช้ enum เป็นประเภทคีย์ ฉันต้องการใช้วิธีการเช่นheadMap()หรือfirstKey()แต่ฉันต้องการกำไรจากการเพิ่มประสิทธิภาพของซีพียู + หน่วยความจำของEnumMaps TreeMapเสียงเหมือนวิธีที่มากเกินไปค่าใช้จ่ายที่นี่ คำถาม : สิ่งนี้เพิ่งพลาดในการนำไปใช้หรือไม่มันเป็นความเกียจคร้าน (มาจากAbstractMap) หรือมีเหตุผลที่ดีว่าทำไมจึงEnumMapไม่ใช่SortedMap?

4
รับพนักงานก่อนและหลังวันที่เฉพาะเจาะจงของการเข้าร่วมจากรายชื่อพนักงานที่มีสตรีม Java
ฉันมีListของEmployees กับวันที่มาร่วมงานที่แตกต่างกัน ฉันต้องการรับพนักงานก่อนและหลังวันที่เฉพาะเจาะจงของการเข้าร่วมจากรายการโดยใช้สตรีม ฉันลองรหัสต่อไปนี้ List&lt;Employee&gt; employeeListAfter = employeeList.stream() .filter(e -&gt; e.joiningDate.isAfter(specificDate)) .collect(Collectors.toList()); List&lt;Employee&gt; employeeListBefore = employeeList.stream() .filter(e -&gt; e.joiningDate.isBefore(specificDate)) .collect(Collectors.toList()); class Employee{ int id; String name; LocalDate joiningDate; } มีวิธีการทำเช่นนี้ในกระแสเดียว?

3
ส่งคืนรายการเริ่มต้นหากรายการว่างเปล่าโดยใช้ java 8 Streams?
มีวิธีใดบ้างเพื่อให้สามารถดำเนินการด้านล่างเป็นชุดการดำเนินการสตรีมหนึ่งชุดแทนการตรวจสอบอย่างชัดเจนว่าถ้า RecommendedProducts ว่างเปล่าจากนั้นส่งคืนรายการเริ่มต้นมิฉะนั้นจะส่งคืนรายการที่กรองหรือไม่ public List&lt;Product&gt; getRecommendedProducts() { List&lt;Product&gt; recommendedProducts = this.newProducts .stream() .filter(isAvailable) .collect(Collectors.toList()); if (recommendedProducts.isEmpty()) { return DEFAULT_PRODUCTS; } return recommededProducts; }

4
วิธีที่มีประสิทธิภาพในการวนซ้ำและคัดลอกค่าของ HashMap
ฉันต้องการแปลง: Map&lt;String, Map&lt;String, List&lt;Map&lt;String, String&gt;&gt;&gt;&gt; inputMap ถึง: Map&lt;String, Map&lt;String, CustomObject&gt;&gt; customMap inputMapมีให้ในการกำหนดค่าและพร้อม แต่ฉันต้องการcustomMapจัดรูปแบบ CustomObject จะได้มาจากการList&lt;Map&lt;String, String&gt;&gt;ใช้โค้ดไม่กี่บรรทัดในฟังก์ชั่น ฉันได้ลองวิธีการทำแผนที่อินพุตซ้ำและคัดลอกค่าคีย์ใน customMap แล้ว มีวิธีที่มีประสิทธิภาพในการทำเช่นนั้นโดยใช้ Java 8 หรือทางลัดอื่น ๆ ? Map&lt;String, Map&lt;String, List&lt;Map&lt;String, String&gt;&gt;&gt;&gt; configuredMap = new HashMap&lt;&gt;(); Map&lt;String, Map&lt;String, CustomObj&gt;&gt; finalMap = new HashMap&lt;&gt;(); for (Map.Entry&lt;String, Map&lt;String, List&lt;Map&lt;String, String&gt;&gt;&gt;&gt; attributeEntry : configuredMap.entrySet()) { Map&lt;String, …

2
ฉันจะคัดลอกคอลเลกชันอย่างปลอดภัยได้อย่างไร
ในอดีตฉันได้กล่าวว่าการคัดลอกคอลเลกชันอย่างปลอดภัยทำบางสิ่งเช่น: public static void doThing(List&lt;String&gt; strs) { List&lt;String&gt; newStrs = new ArrayList&lt;&gt;(strs); หรือ public static void doThing(NavigableSet&lt;String&gt; strs) { NavigableSet&lt;String&gt; newStrs = new TreeSet&lt;&gt;(strs); แต่ตัวสร้าง "สำเนา" เหล่านี้มีวิธีการสร้างและสตรีมแบบสแตติกที่คล้ายกันปลอดภัยจริงๆและมีการระบุกฎไว้ที่ไหนบ้าง โดยความปลอดภัยฉันหมายถึงการรับประกันความสมบูรณ์แบบพื้นฐานทางความหมายของภาษาจาวาและคอลเลกชันที่บังคับใช้กับผู้โทรที่เป็นอันตรายโดยสมมติว่าได้รับการสนับสนุนจากเหตุผลที่สมเหตุสมผลSecurityManagerและไม่มีข้อบกพร่องใด ๆ ฉันมีความสุขด้วยวิธีการขว้างปาConcurrentModificationException, NullPointerException, IllegalArgumentException, ClassCastExceptionฯลฯ หรือบางทีอาจจะแขวน ฉันได้เลือกStringเป็นตัวอย่างของการโต้แย้งประเภทไม่เปลี่ยนรูป สำหรับคำถามนี้ฉันไม่สนใจสำเนาชุดลึกสำหรับคอลเล็กชั่นที่ไม่แน่นอนซึ่งมี gotchas ของตัวเอง (เพื่อความชัดเจนฉันได้ดูซอร์สโค้ด OpenJDK และมีคำตอบบางอย่างสำหรับArrayListและTreeSet.)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.