Сортировка TreeSet [требует правки]

219
11 декабря 2017, 15:20

Если я использую TreeSet для сортировки элементов (товаров с полями category, name, price), как я могу заменить одно из этих полей на значение, которое пользователь напечатает с помощью Scanner? После этого отсортированный лист с замененным элементом должен быть показан на экране.

Answer 1

Используй бинарный поиск.

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;
}
READ ALSO
Помогите пожалуйста решить задачу

Помогите пожалуйста решить задачу

Нужно написать алгоритм , который будет проверять наличие слова в слове

242
Multithreading vs concurency [дубликат]

Multithreading vs concurency [дубликат]

На данный вопрос уже ответили:

260
Как спарсить данные 3х разных классов?

Как спарсить данные 3х разных классов?

Добрый деньПолучаю даннеы от сервера

206
Создание Collection с reflection Type

Создание Collection с reflection Type

Есть метод, который возвращает List< String > (возможен любой объект), но я не знаю об этом и выясняю тип следующим способом:

209