Java 如何按顺序获取对象类的映射键和值

Java 如何按顺序获取对象类的映射键和值,java,Java,我需要在HashMap中获取唯一的key和与key相关的对象变量 我有一份物品清单 public class Java8Examples3 { public static void main(String[] args) { // 3 apple, 2 banana, others 1 List<Item> items = Arrays.asList(new Item("KPIT", 10, new BigDecimal("9.99")),

我需要在
HashMap
中获取唯一的key和与key相关的对象变量

我有一份物品清单

public class Java8Examples3 {

    public static void main(String[] args) {

        // 3 apple, 2 banana, others 1
        List<Item> items = Arrays.asList(new Item("KPIT", 10, new BigDecimal("9.99")),
                new Item("CTS", 20, new BigDecimal("19.99")), new Item("WIPRO", 10, new BigDecimal("29.99")),
                new Item("INFOSYS", 10, new BigDecimal("29.99")), new Item("ESTUATE", 20, new BigDecimal("9.99")),
                new Item("KPIT", 10, new BigDecimal("9.999")), new Item("CTS", 10, new BigDecimal("19.99")),
                new Item("KPIT", 20, new BigDecimal("9.999")));

        Map<String, List<Item>> counting = items.stream()
                .collect(Collectors.groupingBy(Item::getName, Collectors.toList()));

    }
}
public类Java8Examples3{
公共静态void main(字符串[]args){
//3个苹果,2个香蕉,其他1个
列表项=数组.asList(新项(“KPIT”,10,新的BigDecimal(“9.99”)),
新项目(“CTS”,20,新的大十进制(“19.99”)),新项目(“WIPRO”,10,新的大十进制(“29.99”),
新项目(“INFOSYS”,10,新的BigDecimal(“29.99”)),新项目(“Estute”,20,新的BigDecimal(“9.99”),
新项目(“KPIT”,10,新的大十进制(“9.999”)),新项目(“CTS”,10,新的大十进制(“19.99”),
新项目(“KPIT”,20,新的大十进制(“9.999”);
映射计数=items.stream()
.collect(Collectors.groupingBy(Item::getName,Collectors.toList());
Map mapQtyData=列表QTYDATA(计数);
System.out.println(mapQtyData);
}
私有静态映射列表QTYDATA(映射计数){
整数数量=0;
List listQty=new ArrayList();
映射数据=新的HashMap();
字符串键=”;
for(字符串m:counting.keySet()){
key=m;
List iteams=counting.get(键);
对于(int i=0;i
}


O/p:{CTS=[20,10,10,10,20,10],KPIT=[20,10,10,20,20,10,10],ESTUATE=[20,10,10,10,20,20,20,10,10,10],WIPRO=[20,10,10,10,20,20,10,10],INFOSYS=[20,10,10,10,10,10]}

你的问题在哪里?你的问题是什么?默认情况下,地图不按顺序排列。您可以使用LinkedHashMap作为插入顺序,也可以使用TreeMap根据自己编写的比较器对元素进行排序。相关:每个名称都有一些项(对象)。所以要求是每个名称,比如KPIT新项目(“KPIT”,10,新的BigDecimal(“9.99”)、新项目(“KPIT”,10,新的BigDecimal(“9.999”)、新项目(“KPIT”,20,新的BigDecimal(“9.999”)),因为我们是按iteam名称进行分组的。所以我无法得到适当的结果,以获得预期的输出
KPIT: 10,10,20
CTS:20,10
WIPRO:10
INFOSYS:10
TCS:20
public class Java8Examples3 {

public static void main(String[] args) {

    // 3 apple, 2 banana, others 1
    List<Item> items = Arrays.asList(new Item("KPIT", 10, new BigDecimal("9.99")),
            new Item("CTS", 20, new BigDecimal("19.99")), new Item("WIPRO", 10, new BigDecimal("29.99")),
            new Item("INFOSYS", 10, new BigDecimal("29.99")), new Item("ESTUATE", 20, new BigDecimal("9.99")),
            new Item("KPIT", 10, new BigDecimal("9.999")), new Item("CTS", 10, new BigDecimal("19.99")),
            new Item("KPIT", 20, new BigDecimal("9.999")));

    Map<String, List<Item>> counting = items.stream()
            .collect(Collectors.groupingBy(Item::getName, Collectors.toList()));

    Map<String, List<Integer>> mapQtyData = listQtyData(counting);

    System.out.println(mapQtyData);

}

private static Map<String, List<Integer>> listQtyData(Map<String, List<Item>> counting) {
    int qty = 0;
    List<Integer> listQty = new ArrayList<>();
    Map<String, List<Integer>> data = new HashMap<>();
    String key = "";
    for (String m : counting.keySet()) {
        key = m;
        List<Item> iteams = counting.get(key);

        for (int i = 0; i < iteams.size(); i++) {
            qty = iteams.get(i).getQty();
            listQty.add(qty);
        }
        data.put(key, listQty);
    }

    return data;
}