Chỉnh sửa phần tử trong một set

Hi there ! chuyện là Set không có sẵn phương thức get như List với Map ạ, Ví dụ như mình tạo một Set có 10 phần tử kiểu Object tự định nghĩa nào đó thì làm sao để có thể lấy ra một phần tử bất kỳ để chỉnh sửa thuộc tính của nó ạ.
VD : class SinhVien có thuộc tính là String tendouble diem mình tạo thêm HashSet<SinhVien> danhSachLop = new HashSet<SinhVien>(); sau đó tạo sv1, sv2, sv3,....add tất cả vào danhSachLop vậy thì làm sao chỉnh sửa được thuộc tính của sv2 sau khi đã add vào danhSachLop ? mình thấy khi add một phần tử vào set là mất dấu luôn rồi, không còn tham chiếu đến nó được nữa ! cảm ơn ! nếu có code Demo thì tốt quá

mình đang dự định sẽ remove nó ra sau đó add vào lại nhưng thấy nó cứ kỳ kỳ á :((

Set không có thứ tự, vì vậy không thể get thông tin từ index như List hay key như map. Sau khi add đối tượng vào set, nếu bạn không còn giữ tham chiếu của đối tượng đó thì bạn chỉ có thể lọc đối tượng đó bằng các thuộc tính của nó thôi, ví dụ mình cần lọc các đối tượng có thuộc tính id"sv2":

set.stream().filter(noz -> noz.id.equals("sv2"))

Nếu như trong set có nhiều đối tượng "sv2" thì filter vừa rồi sẽ tạo ra nhiều đối tượng trong stream. Hoặc nếu trong set không có đối tượng "sv2" thì filter sẽ tạo ra một stream rỗng. Tuỳ theo cấu trúc của stream đó, bạn có thể sử dụng các hàm forEach(), findAny(), orElse() hoặc các hàm khác ít dùng hơn.

set.stream().filter(noz -> noz.id.equals("sv2")).forEach(x -> x.diem = 10.0);//Tất cả sv2 đều được 10 điểm

SinhVien sv3 = set.stream().filter(noz -> noz.id.equals("sv3")).findAny().orElse(null);
if(sv3 != null)
    sv3.diem = 10.0;
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?