Làm cách nào để xóa các bản sao khỏi Danh sách trang?

Trong hướng dẫn này, chúng ta sẽ xem cách loại bỏ các bản sao khỏi ArrayList trong Java bằng nhiều API inbuild và thư viện của bên thứ ba

Danh sách Java là một giao diện tạo điều kiện lưu trữ một bộ sưu tập dữ liệu được sắp xếp theo thứ tự. Nó cho phép lưu trữ các giá trị trùng lặp. Nhiều khi chúng ta cần tránh trùng lặp trong List. Chúng tôi cần tuân theo một phương pháp nhất định để đạt được các giá trị danh sách duy nhất vì nó không khả dụng

nội dung

Với API Java đơn giản [Xóa các bản sao khỏi ArrayList trong Java]

Đây có lẽ là cách đơn giản nhất để loại bỏ các bản sao khỏi danh sách như sau

List nameLst = Arrays.asList["Nilang","Sam","Peter","Denial","Peter"];
        
System.out.println["Original List :: "+nameLst];

List uniqueNameLst = new ArrayList[];
for[String name : nameLst]{
    if[!uniqueNameLst.contains[name]]{
        uniqueNameLst.add[name];
    }
}
System.out.println["Updated List :: "+uniqueNameLst];

Cách dễ nhất để loại bỏ các giá trị trùng lặp là tạo danh sách thứ hai và chỉ thêm các giá trị duy nhất. Điều này có thể ảnh hưởng đến hiệu suất nếu kích thước danh sách lớn. Đầu ra như sau

Original List :: [Nilang, Sam, Peter, Denial, Peter]
Updated List :: [Nilang, Sam, Peter, Denial]

Các phần tử trong danh sách được cập nhật vẫn giữ nguyên thứ tự

Với Set in Core Java API [Xóa các bản sao khỏi danh sách trong Java]

Một Set trong Java có thể được sử dụng để loại bỏ các bản sao khỏi danh sách như sau

List nameLst = new ArrayList[];
nameLst.add["Nilang"];
nameLst.add["Sam"];
nameLst.add["Peter"];
nameLst.add["Denial"];
nameLst.add["Peter"];

System.out.println["Original List :: "+nameLst];
Set uniqueNameSet = new HashSet[nameLst];

List uniqueNameLst = new ArrayList[uniqueNameSet];
System.out.println["Updated List :: "+uniqueNameLst];

Giải trình

Chúng tôi đang nhờ sự trợ giúp của Đặt để xóa trùng lặp. Đặt trong Java không cho phép trùng lặp. Vì vậy, lưu trữ nội dung danh sách vào Set trước rồi tạo một danh sách mới từ nó. Bạn có thể rút gọn đoạn mã trên như sau

List nameLst = Arrays.asList["Nilang","Sam","Peter","Denial","Peter"];
        
System.out.println["Original List :: "+nameLst];
Set uniqueNameSet = new HashSet[nameLst];
List uniqueNameLst = new ArrayList[uniqueNameSet];
System.out.println["Updated List :: "+uniqueNameLst];

Đầu ra sẽ như sau

Original List :: [Nilang, Sam, Peter, Denial, Peter]
Updated List :: [Peter, Denial, Nilang, Sam]

Sau khi sử dụng Set, thứ tự dữ liệu trong danh sách bị thay đổi. Trong trường hợp nếu thứ tự các phần tử quan trọng, bạn có thể sử dụng LinkedHashSet như sau

List nameLst = Arrays.asList["Nilang","Sam","Peter","Denial","Peter"];
        
System.out.println["Original List :: "+nameLst];
Set uniqueNameSet = new LinkedHashSet[nameLst];

List uniqueNameLst = new ArrayList[uniqueNameSet];
System.out.println["Updated List :: "+uniqueNameLst];

LinkedHashSet không chỉ loại bỏ các phần tử trùng lặp mà còn duy trì thứ tự. Đầu ra như sau

Original List :: [Nilang, Sam, Peter, Denial, Peter]
Updated List :: [Nilang, Sam, Peter, Denial]

Với Set in Google Guava API [Xóa các bản sao khỏi ArrayList trong Java]

Google cung cấp API Guava, cung cấp các lớp tiện ích. Chúng được sử dụng để chơi với khung bộ sưu tập với ít dòng mã hơn như sau

List nameLst = Lists.newArrayList["Nilang","Sam","Peter","Denial","Peter"];
        
System.out.println["Original List :: "+nameLst];
List uniqueNameLst = new ArrayList[Sets.newLinkedHashSet[nameLst]];
System.out.println["Updated List :: "+uniqueNameLst];

Giải trình

Trong Guava, Lists là một lớp tiện ích được sử dụng để tạo ArrayList. Tương tự, lớp Sets được sử dụng để tạo một LinkedHashSet mới. Trong ví dụ này cũng vậy, chúng tôi đang sử dụng cùng một phương pháp – trước tiên hãy thêm dữ liệu vào Set để loại bỏ trùng lặp và sau đó tạo Danh sách mới từ đó

Bạn sẽ nhận được kết quả giống như trong trường hợp trước vì LinkedHashSet giữ nguyên thứ tự của các phần tử

Nếu bạn đang sử dụng Maven, bạn có thể thêm phụ thuộc Guava như sau vào pom của mình. xml

________số 8_______

Sử dụng Luồng Java 8. API riêng biệt [] [Xóa các bản sao khỏi danh sách trong Java]

Hãy nói về một giải pháp mới. Kể từ phiên bản 8, Java cung cấp API luồng, bạn có thể sử dụng API này để trích xuất dữ liệu ở các định dạng khác nhau. Chúng tôi sẽ sử dụng phương thức riêng biệt [] để loại bỏ các giá trị trùng lặp. Mã được cập nhật trông như sau

List nameLst = Arrays.asList["Nilang","Sam","Peter","Denial","Peter"];
    	
System.out.println["Original List :: "+nameLst];
List uniqueNameLst = nameLst.stream[]
 .distinct[]
 .collect[Collectors.toList[]];
System.out.println["Updated List :: "+uniqueNameLst];

Giải trình

  • Phương thức stream[] trên List cung cấp Stream of String
  • Phương thức riêng biệt [] sẽ chỉ trả về các giá trị duy nhất
  • Phương thức coll[] sử dụng Stream of String và điền vào Danh sách bằng cách cung cấp Collectors. tham số toList[]
  • Sau đó, một loạt các cuộc gọi phương thức [cho đến khi phương thức Collect[]] sẽ trả về một Danh sách với các giá trị duy nhất

Đầu ra sẽ như sau

Original List :: [Nilang, Sam, Peter, Denial, Peter]
Updated List :: [Nilang, Sam, Peter, Denial]

Bạn sẽ thấy, Stream API giữ nguyên thứ tự ban đầu của danh sách trong khi loại bỏ trùng lặp

Đặt Vs Stream API, chọn cái gì và khi nào?

Câu hỏi quan trọng nhất. Lựa chọn nào phù hợp nhất với bạn? . 8 trở lên, hãy sử dụng Stream API. Nếu không thì chọn LinkedHashSet

Tuy nhiên, không có quy tắc mã cứng. Bạn vẫn có thể sử dụng LinkedHashSet cho Java 1. 8 trở lên, tuy nhiên, Stream API được khuyên dùng nhiều hơn để có mã rõ ràng hơn và linh hoạt hơn

Cách dễ nhất để loại bỏ trùng lặp là gì?

Xóa các giá trị trùng lặp .
Chọn phạm vi ô có giá trị trùng lặp mà bạn muốn xóa. Mẹo. Xóa mọi đường viền hoặc tổng phụ khỏi dữ liệu của bạn trước khi thử xóa các mục trùng lặp
Bấm vào Dữ liệu > Loại bỏ các mục trùng lặp, rồi bên dưới Cột, chọn hoặc bỏ chọn các cột mà bạn muốn loại bỏ các mục trùng lặp. .
Nhấp vào OK

Làm cách nào để xóa các đối tượng trùng lặp khỏi danh sách?

Sử dụng LinkedHashSet .
Nhận ArrayList với các giá trị trùng lặp
Tạo một LinkedHashSet từ ArrayList này. Điều này sẽ loại bỏ các bản sao
Chuyển đổi LinkedHashSet này trở lại Arraylist
ArrayList thứ hai chứa các phần tử đã loại bỏ các phần tử trùng lặp

Chủ Đề