Предположим, что ваш объект Item имеет функцию GetName вы могли бы написать это:
JComboBox<String> box = new JComboBox<>(
stock.values().stream()
.map(Item::getName)
.toArray(String[]::new)
);
Я думаю, что лучший способ понять синтаксис для вас, чтобы пойти и прочитать Javadoc методов, вызываемых. Еще небольшое объяснение .values () возвращает набор всех значений на карте запаса, а затем поток, как говорит документация, возвращает последовательный поток с коллекцией в качестве источника, тогда карта вызывает функцию getName() (я предполагаю, что у вас есть: public String getName()) для каждого объекта в потоке, а затем вы превратите все строки, которые у вас есть, в массив строк. По результату это так же, как:
JComboBox<String> box = new JComboBox<>();
for(Item item:stock.values()){
box.addItem(item.getName());
}
EDIT:
Если переменная акции в другом классе, то PurchaseItem чем PurchaseItem не может видеть его. Вы можете сделать это подвергается либо путем изменения секретности или сделав функцию получить за него:
public static Map<String, Item> getStock() {
return stock;
}
Поскольку для функции я изначально писал вам, что вы нужны vlaues вы могли бы сделать геттер для vlaue набора, как это:
public static Collection<Item> getStock() {
return stock.values();
}
, а затем modifie код так:
JComboBox<String> box = new JComboBox<>(
NameOfTheClassWhichContainsStock.getStock().stream()
.map(Item::getName)
.toArray(String[]::new)
);
EDIT2: Ваш класс Item является частным, так что не видно снаружи StockD ata, поэтому его невозможно найти. Если вы измените класс Item для общественности и импортировать StockData в классе PurchaseItem, то вы можете написать:
JComboBox<String> box = new JComboBox<>(StockData.getStock()
.values()
.stream()
.map(StockData.Item::getName)
.toArray(String[]::new)
);
EDIT3: состояние на моем компьютере:
package stockdata;
import java.util.HashMap;
import java.util.Map;
public class StockData {
public static class Item {
Item(String n, double p, int q) {
name = n;
price = p;
quantity = q;
}
// get methods
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getQuantity() {
return quantity;
}
// instance variables
private final String name;
private final double price;
private int quantity;
}
// with a Map you use put to insert a key, value pair
// and get(key) to retrieve the value associated with a key
// You don't need to understand how this works!
private final static Map<String, Item> stock = new HashMap<>();
static {
// if you want to have extra stock items, put them in here
// use the same style - keys should be Strings
stock.put("00", new Item("Bath towel", 5.50, 10));
stock.put("11", new Item("Plebney light", 20.00, 5));
stock.put("22", new Item("Gorilla suit", 30.00, 7));
stock.put("33", new Item("Whizz games console", 50.00, 8));
stock.put("44", new Item("Oven", 200.00, 4));
}
public static Map<String, Item> getStock() {
return stock;
}
public static String getName(String key) {
Item item = stock.get(key);
if (item == null) {
return null; // null means no such item
} else {
return item.getName();
}
}
}
// ====== ================================================== =========
package stockdata;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import stockdata.StockData;
public class PurchaseItem extends JFrame implements ActionListener {
// StockData ss = new StockData();
JComboBox<String> box = new JComboBox<>(StockData.getStock().values().stream().map(StockData.Item::getName).toArray(String[]::new));
JComboBox b = new JComboBox();
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
EDIT4:
public double getPriceForName(String itemName){
return StockData.getStock()
.values()
.stream()
.filter(item->item.getName().equals(itemName))//filter only those whit the given name
.mapToDouble(StockData.Item::getPrice)//get item price
.findFirst()//Item name should be unique then it is ok to do this
.getAsDouble();//if there is no item with the given name this will throw a NoSuchElementException
}
public int getQuantityForName(String itemName){
return StockData.getStock()
.values()
.stream()
.filter(item->item.getName().equals(itemName))//filter only those whit the given name
.mapToInt(StockData.Item::getQuantity)//get item quantity
.findFirst()//Item name should be unique then it is ok to do this
.getAsInt();//if there is no item with the given name this will throw a NoSuchElementException
}
И что конкретно представляет собой ваш вопрос или проблема? – Corubba