วิธีการเรียงลำดับArrayList<Long>
ใน Java ลดลง?
วิธีการเรียงลำดับArrayList<Long>
ใน Java ลดลง?
คำตอบ:
นี่เป็นวิธีหนึ่งสำหรับคุณlist
:
list.sort(null);
Collections.reverse(list);
หรือคุณสามารถใช้ของคุณเองComparator
เพื่อจัดเรียงและกำจัดขั้นตอนย้อนกลับ:
list.sort((o1, o2) -> o2.compareTo(o1));
หรือใช้งานง่ายกว่าCollections.reverseOrder()
นั้นเนื่องจากคุณกำลังย้อนกลับเท่านั้น:
list.sort(Collections.reverseOrder());
o2.compareTo(o1)
ที่นี่ :)
list.sort((o1, o2) -> o2.compareTo(o1))
Comparator<Long> comparator = Collections.reverseOrder();
Collections.sort(arrayList, comparator);
คุณสามารถใช้รหัสต่อไปนี้ซึ่งระบุไว้ด้านล่าง
Collections.sort(list, Collections.reverseOrder());
หรือหากคุณกำลังจะใช้ตัวเปรียบเทียบแบบกำหนดเองคุณสามารถใช้ได้ตามที่ระบุไว้ด้านล่าง
Collections.sort(list, Collections.reverseOrder(new CustomComparator());
โดยที่ CustomComparator เป็นคลาสตัวเปรียบเทียบที่เปรียบเทียบอ็อบเจ็กต์ที่มีอยู่ในรายการ
การทำสิ่งนี้ใน java 8 นั้นสนุกและง่ายขึ้นมาก
Collections.sort(variants,(a,b)->a.compareTo(b));
Collections.reverse(variants);
แลมด้าสำนวนร็อคที่นี่ !!!
ในกรณีที่คุณต้องการตรรกะมากกว่าหนึ่งบรรทัดในการเปรียบเทียบaและbคุณสามารถเขียนแบบนี้ได้
Collections.sort(variants,(a,b)->{
int result = a.compareTo(b);
return result;
});
เรียงตามปกติและใช้ Collections.reverse();
สำหรับ lamdas ที่ค่า long ของคุณอยู่ที่ไหนสักแห่งในวัตถุฉันแนะนำให้ใช้:
.sorted((o1, o2) -> Long.compare(o1.getLong(), o2.getLong()))
หรือดีกว่า:
.sorted(Comparator.comparingLong(MyObject::getLong))
เรียงลำดับแล้วย้อนกลับ
แนวทางทั่วไปในการใช้งานตัวเปรียบเทียบของเราเองดังต่อไปนี้
Collections.sort(lst,new Comparator<Long>(){
public int compare(Long o1, Long o2) {
return o2.compareTo(o1);
}
});
วิธีการต่อไปนี้จะจัดเรียงรายการตามลำดับจากมากไปหาน้อยและยังจัดการกับค่า ' null ' ในกรณีที่คุณมีค่า null Collections.sort ()จะโยนNullPointerException
Collections.sort(list, new Comparator<Long>() {
public int compare(Long o1, Long o2) {
return o1==null?Integer.MAX_VALUE:o2==null?Integer.MIN_VALUE:o2.compareTo(o1);
}
});
คุณยังสามารถเรียงลำดับArrayList
ด้วย a TreeSet
แทนไฟล์comparator
. นี่คือตัวอย่างจากคำถามที่ฉันเคยมีมาก่อนสำหรับอาร์เรย์จำนวนเต็ม ฉันใช้ "numbers" เป็นชื่อตัวยึดสำหรับไฟล์ArrayList
.
import.java.util.*;
class MyClass{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
ArrayList<Integer> numbers = new ArrayList<Integer>();
TreeSet<Integer> ts = new TreeSet<Integer>(numbers);
numbers = new ArrayList<Integer>(ts);
System.out.println("\nThe numbers in ascending order are:");
for(int i=0; i<numbers.size(); i++)
System.out.print(numbers.get(i).intValue()+" ");
System.out.println("\nThe numbers in descending order are:");
for(int i=numbers.size()-1; i>=0; i--)
System.out.print(numbers.get(i).intValue()+" ");
}
}
ดังนั้นมีบางอย่างที่ฉันอยากจะนำเสนอซึ่งฉันคิดว่าสำคัญและฉันคิดว่าคุณควรพิจารณา รันไทม์และหน่วยความจำ สมมติว่าคุณมีรายการและต้องการจัดเรียงคุณสามารถทำได้มีการจัดเรียงในตัวหรือคุณสามารถพัฒนาของคุณเอง แล้วคุณบอกว่าต้องการย้อนกลับรายการ นั่นคือคำตอบที่ระบุไว้ข้างต้น
หากคุณกำลังสร้างรายการนั้นอาจเป็นการดีที่จะใช้โครงสร้างข้อมูลที่แตกต่างกันเพื่อจัดเก็บจากนั้นจึงถ่ายโอนข้อมูลลงในอาร์เรย์
กองทำเพียงแค่นี้ คุณกรองข้อมูลและจะจัดการทุกอย่างจากนั้นคุณสามารถดึงข้อมูลทุกอย่างออกจากวัตถุและจะถูกจัดเรียง
อีกทางเลือกหนึ่งคือการทำความเข้าใจว่าแผนที่ทำงานอย่างไร หลายครั้งแผนที่หรือ HashMap เป็นสิ่งที่เรียกว่ามีแนวคิดพื้นฐานอยู่เบื้องหลัง
ตัวอย่างเช่น .... คุณป้อนคู่คีย์ - ค่าจำนวนมากโดยที่คีย์เป็นแบบยาวและเมื่อคุณเพิ่มองค์ประกอบทั้งหมดคุณสามารถทำได้: .keys
และมันจะส่งกลับรายการที่จัดเรียงให้คุณโดยอัตโนมัติ
ขึ้นอยู่กับว่าคุณประมวลผลข้อมูลอย่างไรก่อนที่ฉันคิดว่าคุณควรดำเนินการเรียงลำดับต่อไปและการกลับรายการในภายหลัง
วิธีการเปรียบเทียบของผู้เปรียบเทียบสามารถใช้เพื่อเปรียบเทียบวัตถุจากนั้นreversed()
สามารถใช้วิธีการเพื่อย้อนกลับลำดับ -
list.stream().sorted(Comparator.comparing(Employee::getName).reversed()).collect(toList());
การใช้List.sort()
และComparator.comparingLong()
numberList.sort(Comparator.comparingLong(x -> -x));
l1 > l2 ? -1 : l1 == l2 ? 0 : 1
รหัสนี้ไร้สาระ ใช้o1.compareTo(o2)
แล้ว