Java - ลบค่าว่างจากรายการวัตถุ [ซ้ำกัน]

Nov 19 2020

ฉันมีวัตถุรายการ java ขนาดใหญ่ดังนี้:

List<Object[]> res = // repo method that will return query result

ฉันต้องลบ null จากวัตถุ res

ฉันลองวิธีการด้านล่างแล้ว แต่ดูเหมือนจะไม่ได้ผล:

1. res.remove(null);
2. res.removeAll(Collections.singleton(null));
3. res.removeAll(null);
4. while(res.remove(null));

ฉันจะลบ null อย่างมีประสิทธิภาพได้อย่างไรเนื่องจากขนาดรายการจะใหญ่มาก

คำตอบ

6 NikolasCharalambidis Nov 19 2020 at 17:48

รายการที่ไม่แน่นอน

คุณสามารถใช้List::removeIfกับnullรายการตรวจจับเพรดิเคต

List<Object[]> mutableList = new ArrayList<>(Arrays.asList(
    new Object[] {}, 
    null, 
    new Object[] {}));

mutableList.removeIf(Objects::isNull);

รายการไม่เปลี่ยนรูป

ในกรณีนี้คุณต้องใช้ Stream API หรือ for-loop เพื่อค้นหาองค์ประกอบที่ไม่ใช่ null และเพิ่มลงในรายการใหม่

List<Object[]> immutableList = Arrays.asList(
    new Object[] {}, 
    null, 
    new Object[] {});

List<Object[]> newList = immutableList.stream()
                                      .filter(Objects::nonNull)
                                      .collect(Collectors.toList());