Đếm số lượng phần tử trùng nhau trong Set

Hi there ! cho mình hỏi làm sao đếm được các đối tượng trùng nhau trong Set ạ. Ví dụ chức năng giỏ hàng khi add một sản phẩm vào set nếu trùng với cái có sẵn thì tăng số lượng. mình có thể dùng Arraylist hoặc map để lưu cặp giá trị (sản phẩm-số lượng) nhưng mình vẫn muốn dùng Set. cảm ơn !

Ví dụ 1 sản phẩm có TÊN và SỐ LƯỢNG
khi add vào bạn kiểm tra xem set đó có tên của sản phẩm đó chưa

  • Nếu có thì bạn tăng số lượng lên 1 bằng cách gán 1 biến sản phẩm = với sản phẩm có trong danh sách sau đó remove sản phẩm cũ và add sản phẩm mới đã được tăng số lượng lên 1
  • Nếu không có thì bạn add binh thường với tên và số lượng là 1

Để xem bạn có dàm xài code mẫu không :))

set.stream().anyMatch(x -> x.id == idToCheck) ? set.stream().filter(x -> x.id == idToCheck).forEach(x.num++) : set.add(new Item(idToCheck, 1));
4 Likes

vậy thì mình phải viết phương thức thêm vào danh sách if đối tượng muốn thêm vào chưa trùng với đối tượng đã có trong danh sách thì mới thêm vào phải không anh ?

public static void themVaods(SanPham sp, TreeSet<SanPham> danhSach) {
		if (!danhSach.contains(sp)) {
			danhSach.add(sp);
		}
	}

nhưng nếu dùng cách này thì e thấy Set không thể phát huy ưu điểm ( không lưu phần tử trùng nhau ) so với dùng List ạ

Đúng vậy :smiley: đoạn ở phía trên cũng ko phát huy ưu điểm của Set (độ phức tạp) đâu.

Bài này dùng Map mới là hợp lí.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?