要在Spring端点中返回的hasMap的Java ArrayList

要在Spring端点中返回的hasMap的Java ArrayList,java,spring,arraylist,hashmap,Java,Spring,Arraylist,Hashmap,我有一些示例对象将包含在ArrayList中,这些项必须以特定的格式出现,每个项必须是json返回中数组的新位置 遵循我迄今为止开发的代码: import java.util.List; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; public class MyClass { String text = "hi"; String la

我有一些示例对象将包含在ArrayList中,这些项必须以特定的格式出现,每个项必须是json返回中数组的新位置

遵循我迄今为止开发的代码:

import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

public class MyClass {
    
    String text = "hi";
    String language = "pt-br";
    String item = "1";
    
    public static void main(String args[]) {
        
        MyClass myObj1 = new MyClass();
        myObj1.text = "ola";
        myObj1.language = "pt-br";
        myObj1.item = "1";
 
        
        MyClass myObj2 = new MyClass();
        myObj2.text = "hi";
        myObj2.language = "en";
        myObj2.item = "1";

        
        MyClass myObj3 = new MyClass();
        myObj3.text = "holaa";
        myObj3.language = "es";
        myObj3.item = "2";
        
        MyClass myObj4 = new MyClass();
        myObj4.text = "olaaaaa";
        myObj4.language = "pt-br";
        myObj4.item = "2";

        MyClass myObj5 = new MyClass();
        myObj5.text = "helllooo";
        myObj5.language = "eng";
        myObj5.item = "3";

        
        List<MyClass> lang = new ArrayList<MyClass>();
        lang.add(myObj1);
        lang.add(myObj2);
        lang.add(myObj3);
        lang.add(myObj3);
        lang.add(myObj4);
        
        ArrayList<HashMap<String, String>> lista = new ArrayList<>();
        
        HashMap<String, String> mapa = new HashMap<>();
        
        for(int i = 0; i < lang.size();i++) {
            
            
            if(i > 0 && lang.get(i).item != lang.get(i-1).item) {
                
                lista.add(mapa);
                mapa.clear();
            }
            
            if(i == lang.size()-1){
                lista.add(mapa);
                mapa.clear();
            }
            
            mapa.put(lang.get(i).language, lang.get(i).text); 
            
            
        }
        
        
        
        System.out.println(lista.toString());
        
    }
}

Spring的整个部分都已经实现了,我需要操作结果,以便在我的端点中正确显示。

实现一个
对象,然后将输入的
列表语言
转换为
列表

@JsonNaming(PropertyNamingStrategy.snakecasestractegy.class)
公共类项目{
int item_id;
List language;//也许Map可以
项目(地图条目){
这(entry.getKey(),entry.getValue());
}
项目(int id,映射语言){
this.item_id=id;
this.language=Arrays.asList(语言);
}
公共字符串toString(){
返回字符串。格式(“项目id:%d,%n语言:%s%n”,项目id,语言);
}
//能手/二传手
}
//MyClass.java
静态列表转换(列表数据){
返回数据
.stream()
.collect(收集器.groupingBy(
x->Integer.parseInt(x.item),//变成int`item\u id`
LinkedHashMap::新建,//保持插入顺序
Collectors.mapping(//准备映射语言:text
x->Map.entry(x.language,x.text),//Java9
汤姆(
Map.Entry::getKey,
Map.Entry::getValue,
(a,b)->a,//合并偶尔重复的
LinkedHashMap::new)//保留插入顺序或树映射以按语言排序
)
))
.entrySet().stream()
.map(Item::new)//引用重载构造函数
.collect(Collectors.toList());
}
试验

评论:

  • 如果无法使用Java 9
    Map.entry
    ,则可以使用旧的
    new AbstractMap.SimpleEntry(x.language,x.text)
  • 不确定在
    项中是否真的需要映射列表
    ,提供它只是为了满足要求以及
    数组。asList(e.getValue())
    ;映射实例应该很好
  • Item
    类中,在
    @JsonNaming
    注释中使用Jackson
    SnakeCaseStrategy
    ,以确保
    Item\u id
    的正确序列化
更新

修复并在
Item
类中添加了一个重载构造函数,在
transform

中使用了方法reference
Item::new
现在有什么问题?我无法在ArrayList的相同位置返回每个Item\u id是否每个Item的
language
属性都必须是一个数组,如果它总是包含一个对象?是,一个数组..输入数组中的项是否总是保证从1,2,3,…,到n?其中n为项目总数。或者可能存在间隙,例如,输入数组只有项目1、3和5。
[{
    "item_id": 1,
    "language": [{
        "pt-br": "ola",
        "en": "hii"
    }]
}, {
    "item_id": 2,
    "language": [{
        "es": "holaa",
        "pt-br": "olaaaaa"
    }]
}, {
    "item_id": 3,
    "language": [{
        "eng": "helllooo"
    }]
}]
List<Item> items = transform(lang);
items.forEach(System.out::println);
item_id: 1,
language: [{pt-br=ola, en=hi}]

item_id: 2,
language: [{es=holaa, pt-br=olaaaaa}]

item_id: 3,
language: [{eng=helllooo}]