วิธีใดที่ตัดทอนรายการเช่น 100 องค์ประกอบแรก - ทิ้งรายการอื่น ๆ (โดยไม่ต้องวนซ้ำผ่านแต่ละองค์ประกอบ)
วิธีใดที่ตัดทอนรายการเช่น 100 องค์ประกอบแรก - ทิ้งรายการอื่น ๆ (โดยไม่ต้องวนซ้ำผ่านแต่ละองค์ประกอบ)
คำตอบ:
ใช้List.subList
:
import java.util.*;
import static java.lang.Math.min;
public class T {
public static void main( String args[] ) {
List<String> items = Arrays.asList("1");
List<String> subItems = items.subList(0, min(items.size(), 2));
// Output: [1]
System.out.println( subItems );
items = Arrays.asList("1", "2", "3");
subItems = items.subList(0, min(items.size(), 2));
// Output: [1, 2]
System.out.println( subItems );
}
}
คุณควรจำไว้ว่าsubList
จะส่งคืนมุมมองของรายการดังนั้นหากคุณต้องการให้รายการที่เหลือมีสิทธิ์ได้รับการรวบรวมขยะคุณควรคัดลอกรายการที่คุณต้องการไปยังรายการใหม่List
:
List<String> subItems = new ArrayList<String>(items.subList(0, 2));
หากรายการสั้นกว่าขนาดที่ระบุคาดว่าจะอยู่นอกขอบเขต ข้อยกเว้น เลือกค่าต่ำสุดของขนาดที่ต้องการและขนาดปัจจุบันของรายการเป็นดัชนีสิ้นสุด
สุดท้ายโปรดทราบว่าอาร์กิวเมนต์ที่สองควรเป็นมากกว่าดัชนีสุดท้ายที่ต้องการ
Stream.limit
ควรทำเคล็ดลับ ( docs.oracle.com/javase/8/docs/api/java/util/stream/… )
list.subList(100, list.size()).clear();
หรือ:
list.subList(0, 100);
list = list.subList(0, 100)
subList(100, list.size()).clear()
การทำงานจะมีเพียงถ้ารายการมีวิธีการดำเนินการที่ชัดเจนเช่นถ้าคุณสร้างlist
โดยList<String> list = Arrays.asList(someString.split(","));
ชัดเจน () จะโยนUnsupportedOperationException
ตั้งแต่จะเป็นนามธรรมlist
List
list.subList(n, list.size()).clear();
subList
ตามที่แนะนำไว้ในคำตอบอื่น ๆ เป็นสิ่งแรกที่ควรคำนึงถึง ฉันขอแนะนำวิธีการสตรีมด้วย
source.stream().limit(10).collect(Collectors.toList()); // truncate to first 10 elements
source.stream().skip(2).limit(5).collect(Collectors.toList()); // discards the first 2 elements and takes the next 5