import java.util.*;
public class ItemManager {
private List<String> myCollection = new ArrayList<>();
private Map<String, Collectable> itemDetails = new HashMap<>();
private Set<String> tradedItems = new HashSet<>();
private Set<String> duplicateItems = new HashSet<>();
// Bulk add using names and item map
public void addItemsBulk(List<String> newItems) {
for (String name : newItems) {
if (myCollection.contains(name)) {
duplicateItems.add(name);
} else {
myCollection.add(name);
}
}
}
// Bulk remove using item names
public void removeItemsBulk(List<String> itemsToRemove) {
for (String name : itemsToRemove) {
if (myCollection.remove(name)) {
tradedItems.add(name);
itemDetails.remove(name);
}
}
}
// Update value (rarity) of items by type (e.g., "epic") by %
public void updateValuesByType(String type, int percentage) {
for (Map.Entry<String, Collectable> entry : itemDetails.entrySet()) {
Collectable item = entry.getValue();
if (item.getType().equalsIgnoreCase(type)) {
int updatedRarity = (int) Math.round(item.getRarity() * (1 + percentage / 100.0));
setRarity(item, updatedRarity);
}
}
}
// Filter by rarity
public Map<String, Collectable> filterByRarity(int rarity) {
Map<String, Collectable> filtered = new HashMap<>();
for (Map.Entry<String, Collectable> entry : itemDetails.entrySet()) {
if (entry.getValue().getRarity() == rarity) {
filtered.put(entry.getKey(), entry.getValue());
}
}
return filtered;
}
// Display full collection
public void displayCollection() {
System.out.printf("%-20s %-15s %-10s%n", "Name", "Type", "Rarity");
System.out.println("--------------------------------------------------");
for (String name : myCollection) {
Collectable item = itemDetails.getOrDefault(name, new Collectable(name, "Unknown", 0));
System.out.printf("%-20s %-15s %-10d%n",
item.getName(), item.getType(), item.getRarity());
}
}
// Helper to update rarity (since it's private)
private void setRarity(Collectable item, int newRarity) {
try {
var field = Collectable.class.getDeclaredField("rarity");
field.setAccessible(true);
field.setInt(item, newRarity);
} catch (Exception e) {
System.err.println("Error updating rarity: " + e.getMessage());
}
}
// Demo
public static void main(String[] args) {
ItemManager manager = new ItemManager();
// Create some items
Collectable sword = new Collectable("Sword", "common", 100);
Collectable shield = new Collectable("Shield", "epic", 300);
Collectable bow = new Collectable("Bow", "rare", 200);
// Add to itemDetails
manager.itemDetails.put(sword.getName(), sword);
manager.itemDetails.put(shield.getName(), shield);
manager.itemDetails.put(bow.getName(), bow);
// Bulk add
manager.addItemsBulk(List.of("Sword", "Shield", "Bow", "Sword"));
// Bulk remove
manager.removeItemsBulk(List.of("Bow"));
// Update all epic items
manager.updateValuesByType("epic", 10);
// Filter by rarity
Map<String, Collectable> filtered = manager.filterByRarity(330);
System.out.println("\nFiltered Items (rarity 330):");
filtered.values().forEach(System.out::println);
// Display full collection
System.out.println("\nFull Collection:");
manager.displayCollection();
// Show tracking sets
System.out.println("\nDuplicate Items: " + manager.duplicateItems);
System.out.println("Traded Items: " + manager.tradedItems);
}
}