Если я использую TreeSet
для сортировки элементов (товаров с полями category
, name
, price
), как я могу заменить одно из этих полей на значение, которое пользователь напечатает с помощью Scanner
? После этого отсортированный лист с замененным элементом должен быть показан на экране.
Используй бинарный поиск.
static class Goods implements Comparable<Goods> {
private final String category;
private String name;
private final BigDecimal price;
public Goods(String category, String name, BigDecimal price) {
this.category = category;
this.name = name;
this.price = price;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Goods other) {
int c = category.compareTo(other.category);
return c != 0 ? c : name.compareTo(other.name);
}
@Override
public String toString() {
return category + "/" + name + ": $" + price;
}
}
public static void main(String[] args) throws Exception {
TreeSet<Goods> set = new TreeSet<>();
Goods g1 = new Goods("category", "name", new BigDecimal(1));
Goods g2 = new Goods("category", "name2", new BigDecimal(1));
set.add(g1);
set.add(g2);
Goods g3 = search(set, g1);
Scanner scanner = new Scanner(System.in);
g3.setName(scanner.next());
for (Goods goods : set) {
System.out.println(goods);
}
}
// https://stackoverflow.com/users/2711596/debasis
// https://stackoverflow.com/questions/17806543/find-and-return-an-element-from-a-treeset-in-java
static <T extends Comparable> T search(TreeSet<T> set, T key) {
T ceil = set.ceiling(key); // least elt >= key
T floor = set.floor(key); // highest elt <= key
return ceil == floor ? ceil : null;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно написать алгоритм , который будет проверять наличие слова в слове
Есть метод, который возвращает List< String > (возможен любой объект), но я не знаю об этом и выясняю тип следующим способом: