Как остановить дублирование в JComboBox? - PullRequest
0 голосов
/ 24 декабря 2018

enter image description here

cmbMake = new JComboBox();
cmbMake.addItem("**Please Select**");
Iterator i = products.entrySet().iterator();
while (i.hasNext())
{
    Map.Entry me = (Map.Entry) i.next();
    Product p = (Product) me.getValue();

    if(!p.getMake().equals(cmbMake.getSelectedItem()))
    {
        cmbMake.addItem("" + p.getMake());
    }
}

У меня есть класс, в котором хранится информация о продукте. Есть ли способ остановить добавление того же производителя в поле со списком?

Ответы [ 4 ]

0 голосов
/ 25 декабря 2018

Добавьте все значения к Set и выполните итерации по нему:

 for(Object o : new HashSet<>(products.values())){
        Product p = (Product) o.getValue();
        if(!p.getMake().equals(cmbMake.getSelectedItem()))   {
            cmbMake.addItem("" + p.getMake());
        }
 }
0 голосов
/ 24 декабря 2018

Попробуйте этот код,

cmbMake = new JComboBox();
    cmbMake.addItem("**Please Select**");
    Map products = null;
    Iterator i = products.entrySet().iterator();

        while (i.hasNext()) {
            Map.Entry me = (Map.Entry) i.next();
            Product p = (Product) me.getValue();
            Set<String> productSet = new HashSet<String>();
            productSet.add(p.getMake());
            if (!p.getMake().equals(cmbMake.getSelectedItem())) {
                if (productSet.size() > 0) {
                    productSet.forEach(action -> {
                        cmbMake.addItem("" + action);
                    });
                }

            }
        }
0 голосов
/ 25 декабря 2018

Вы можете попробовать этот код (я добавил некоторый код к вашему).Код получает значения , создает и сохраняет их в коллекции Set , а затем заполняет поле со списком.

cmbMake = new JComboBox();
cmbMake.addItem("**Please Select**");

Iterator i = products.entrySet().iterator();
Set<String> uniqueMakes = new HashSet<>(); // this stores unique makes

while (i.hasNext())
{
    Map.Entry me = (Map.Entry) i.next();
    Product p = (Product) me.getValue();

    //if(! p.getMake().equals(cmbMake.getSelectedItem()))
    //{
    //  cmbMake.addItem("" + p.getMake());
    //}

    uniqueMakes.add(p.getMake());
}

System.out.println(uniqueMakes); // this prints the makes

// Add makes to the combo box
for (String make : uniqueMakes) {
    cmbMake.addItem(make);
}


Предложения: при использовании некоторых из них можно использовать параметры типа , например:

JComboBox<String> cmbMake = new JComboBox<>();
Iterator<Product> i = products.entrySet().iterator();

РЕДАКТИРОВАТЬ: здесь приведены учебные пособия по с использованием набора наборов и с использованием Generics .

EDIT (еще один способ кодирования той же функциональности с использованием программирования в функциональном стиле):

cmbMake = new JComboBox<String>();
cmbMake.addItem("**Please Select**");
products.values()
        .map(product -> product.getMake())
        .collect(Collectors.toCollection(HashSet::new))
        .forEach(make -> cmbMake.addItem(make));
0 голосов
/ 24 декабря 2018

Предполагая, что make равен String, просто создайте набор со всеми различными значениями, а затем добавьте их в ComboBox:

Set<String> productMakes = new HashSet<String>();
for (Map.Entry<KeyClass, Product> productEntry: products.entrySet()) {
    productMakes.add(productEntry.getValue().getMake());
}

// How about sorting the items before adding them to the ComboBox?
List<String> sortedProductMakes = new ArrayList<String>(productMakes);
java.util.Collections.sort(sortedProductMakes);

for (String productMake : sortedProductMakes ) {
    cmbMake.addItem(productMake);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...