Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中对对象列表中的项进行分组_Java_Arrays_Oracle_Grouping_Rdbms - Fatal编程技术网

在Java中对对象列表中的项进行分组

在Java中对对象列表中的项进行分组,java,arrays,oracle,grouping,rdbms,Java,Arrays,Oracle,Grouping,Rdbms,我正在用Angular+Java(Oracle-RDBMS)开发一个web应用程序。在一个页面中,我显示了Dto中包含的数据,这些数据在响应页面中发送回浏览器(显然是在转换成json之后)。它可以工作,但此Dto包含一个对象列表,其中包含: | FOOD | CUSTOMER | COUNT Apple X 3 Apple y 1 Apple z 5 Milk j 2 Milk

我正在用Angular+Java(Oracle-RDBMS)开发一个web应用程序。在一个页面中,我显示了Dto中包含的数据,这些数据在响应页面中发送回浏览器(显然是在转换成json之后)。它可以工作,但此Dto包含一个对象列表,其中包含:

| FOOD | CUSTOMER | COUNT
  Apple     X         3
  Apple     y         1
  Apple     z         5
  Milk      j         2
  Milk      p         1
这就是我所做的过程:

    List<FoodsDto> foods = new ArrayList<FoodsDto>();
    // I call the query to retrieve the list and I add it ordering for 'foods'...
    // Then I set it on the result 
    result.setFoods(developmentResult);
    // And i send the response on browser...
“9”和“3”是计数的总和,因此是总数。反过来,这些行必须包含包含所有信息的子数组。因此:

[Apple 9] --
           |--> Apple x 3
           |--> Apple y 1
           |--> Apple z 5

[Milk  3] --
           |--> Milk j 2
           |--> Milk p 1

如何“打破”列表并将其分组?

如果您不想创建单独的DTO,您可以简单地迭代
食物DTO的列表,并使用另一个
映射进行分组,如下所示

Map<String, Integer> foodGroup = new HashMap<>();
 for(FoodsDto foodsDto : foods) {
    if(foodGroup.containsKey(foodsDto.getFood())){
       foodGroup.put(foodsDto.getFood(), (foodGroup.get(foodsDto.getFood()) + foodsDto.getCount())); 
    } else {
       foodGroup.put(foodsDto.getFood(), foodsDto.getCount());
    }
}
Map foodGroup=new HashMap();
用于(食品到食品到:食品){
if(foodGroup.containsKey(foodsDto.getFood()){
foodGroup.put(foodsDto.getFood(),(foodGroup.get(foodsto.getFood())+foodsto.getCount());
}否则{
foodGroup.put(foodsDto.getFood(),foodsDto.getCount());
}
}

然后在回复中发送
foodGroup
。在前端(在Javascript/AngularJs中),您需要映射
foodGroup
foods
,使用食物名称作为键以您想要的方式显示它。

如果您不想创建单独的DTO,您可以简单地迭代
FoodsDto
列表,并使用另一个
map
进行分组,如下所示

Map<String, Integer> foodGroup = new HashMap<>();
 for(FoodsDto foodsDto : foods) {
    if(foodGroup.containsKey(foodsDto.getFood())){
       foodGroup.put(foodsDto.getFood(), (foodGroup.get(foodsDto.getFood()) + foodsDto.getCount())); 
    } else {
       foodGroup.put(foodsDto.getFood(), foodsDto.getCount());
    }
}
Map foodGroup=new HashMap();
用于(食品到食品到:食品){
if(foodGroup.containsKey(foodsDto.getFood()){
foodGroup.put(foodsDto.getFood(),(foodGroup.get(foodsto.getFood())+foodsto.getCount());
}否则{
foodGroup.put(foodsDto.getFood(),foodsDto.getCount());
}
}
然后在回复中发送
foodGroup
。在前端(在Javascript/AngularJs中),您需要映射
foodGroup
foods
,使用FoodName作为键以您想要的方式显示它

“9”和“3”是计数的som,因此是总数。反过来,这些行必须包含包含所有信息的子数组

您可以使用地图将食物按食物分组:

    Map<FoodsDto, List<FoodsDto>> map = new HashMap<>();        

    for(FoodsDto o : developmentResult){
        // using the FoodsDto as the key
        if (map.get(o) != null) {
            map.get(o).add(o);
        } else {
            List<FoodsDto> foodList = new ArrayList<FoodsDto>();
            foodList.add(o);
            map.put(o, foodList);
        }
    }

    for (Map.Entry<FoodsDto, List<FoodsDto>> entry : map.entrySet()) {
        List<FoodsDto> list = entry.getValue();
        System.out.println(String.format("%s: %d", entry.getKey(), list.size()));

        for(FoodsDto f : list){
            System.out.println(f);
        }
    }
Map Map=newhashmap();
用于(食品数据至:开发结果){
//使用FoodsDto作为键
if(map.get(o)!=null){
map.get(o)、add(o);
}否则{
List foodList=new ArrayList();
食品清单。添加(o);
地图放置(o,食物列表);
}
}
对于(Map.Entry:Map.entrySet()){
List=entry.getValue();
System.out.println(String.format(“%s:%d”、entry.getKey()、list.size());
对于(食品到f:列表){
系统输出打印ln(f);
}
}
“9”和“3”是计数的som,因此是总数。反过来,这些行必须包含包含所有信息的子数组

您可以使用地图将食物按食物分组:

    Map<FoodsDto, List<FoodsDto>> map = new HashMap<>();        

    for(FoodsDto o : developmentResult){
        // using the FoodsDto as the key
        if (map.get(o) != null) {
            map.get(o).add(o);
        } else {
            List<FoodsDto> foodList = new ArrayList<FoodsDto>();
            foodList.add(o);
            map.put(o, foodList);
        }
    }

    for (Map.Entry<FoodsDto, List<FoodsDto>> entry : map.entrySet()) {
        List<FoodsDto> list = entry.getValue();
        System.out.println(String.format("%s: %d", entry.getKey(), list.size()));

        for(FoodsDto f : list){
            System.out.println(f);
        }
    }
Map Map=newhashmap();
用于(食品数据至:开发结果){
//使用FoodsDto作为键
if(map.get(o)!=null){
map.get(o)、add(o);
}否则{
List foodList=new ArrayList();
食品清单。添加(o);
地图放置(o,食物列表);
}
}
对于(Map.Entry:Map.entrySet()){
List=entry.getValue();
System.out.println(String.format(“%s:%d”、entry.getKey()、list.size());
对于(食品到f:列表){
系统输出打印ln(f);
}
}