Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 将列表转换为字符串的HasMap&;ArrayList_Java_Arraylist_Collections - Fatal编程技术网

Java 将列表转换为字符串的HasMap&;ArrayList

Java 将列表转换为字符串的HasMap&;ArrayList,java,arraylist,collections,Java,Arraylist,Collections,我使用Java1.6。 我在ArrayList上有一个迭代器。对于每个JavaBean,它以下面的格式返回值 id="my_Bean" name="my Bean" value="Red" collection= { {id= "my_Bean", name= "my Bean", values= ["Red", "Blue", "Green"]}, .....& so on.. } 对于每一次迭代,我都有可能得到相同的id和名称以及不同的“值” 我想把它转换成一个HashMap(也

我使用Java1.6。 我在ArrayList上有一个迭代器。对于每个JavaBean,它以下面的格式返回值

id="my_Bean" name="my Bean" value="Red"
collection= { {id= "my_Bean", name= "my Bean", values= ["Red", "Blue", "Green"]}, .....& so on.. }
对于每一次迭代,我都有可能得到相同的id和名称以及不同的“值”

我想把它转换成一个HashMap(也许),它应该给我以下格式的值

id="my_Bean" name="my Bean" value="Red"
collection= { {id= "my_Bean", name= "my Bean", values= ["Red", "Blue", "Green"]}, .....& so on.. }

我写不出它的逻辑。任何帮助都会很好。

您可以用这种方式为地图制作关键点

String key = id + "-" + name;

假设您的bean有getter,下面的方法可能会有用。使用复合键,
映射
的值是一个
列表
(如果需要,它显然可以是一个
列表

因此,我将使用循环来收集所有值,然后使用复合键。一种方法是使用
commons-lang3
中的
Pair
类:

final Map<Pair<String, String>, List<Bean>> map = new HashMap<Pair<String, String>, List<Bean>>();
for (final Iterator<Bean> itr = beans.iterator(); itr.hasNext(); ) {
    Bean bean = itr.next();
    final Pair<String, String> key = Pair.of(bean.getId(), bean.getName());
    List<Bean> value = map.get(key);
    if (value != null) {
        value = new ArrayList<Bean>();
        map.put(key, value);
    }
    value.add(bean);
}
final Map=new HashMap();
for(最终迭代器itr=beans.Iterator();itr.hasNext();){
Bean=itr.next();
最后一对key=Pair.of(bean.getId(),bean.getName());
列表值=map.get(键);
if(值!=null){
值=新的ArrayList();
map.put(键、值);
}
增值(bean);
}
在Maven POM或类似版本中,导入以下工件:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.3.2</version>
</dependency>

org.apache.commons
commons-lang3
3.3.2
如果您不知道自己的ID和名称会是什么样子,那么这种方法是安全的。例如,如果您的密钥包含字母
-
,则复合密钥不应为'id+“-”+name'


还请注意,有许多库提供了
Pair
-类或类似类。有时该类可能被称为
元组

可能是一种解决方案:

我假设在对象字段上有getter/setter

使bean的值字段也成为ArrayList,在迭代步骤中,您可以执行以下操作:

// Create collection which will store the duplicates (which have same name and id)

Map collection = new HashMap<String, ArrayList>();

for(referenceElement:yourArrayList){
  for(nextElement:yourArrayList){
     if(referenceElement.getId==nextElement.getId
        &&referenceElement.getName.equals(nextElement.getName)){
          MyBean duplicate = new MyBean();
          ArrayList values = new ArrayList<String>();
          values.add(referenceElement.getValue);
          values.add(nextElement.getValue);
          collection.put("id= "+duplicate.setId(referenceElement.getId)+", "
          +"name= "+duplicate.setName(referenceElement.getName), duplicate.setValue(values);
                                                            }
                                 }
}
//创建将存储重复项(具有相同名称和id)的集合
Map collection=newhashmap();
for(referenceElement:yourArrayList){
对于(下一个事件:yourArrayList){
if(referenceElement.getId==nextElement.getId
&&referenceElement.getName.equals(nextElement.getName)){
MyBean duplicate=newmybean();
ArrayList值=新的ArrayList();
add(referenceElement.getValue);
add(nextElement.getValue);
collection.put(“id=“+duplicate.setId(referenceElement.getId)+”,“
+“name=“+duplicate.setName(referenceElement.getName)、duplicate.setValue(值);
}
}
}

比较列表中bean对象的另一个技巧是实现
Comparable
接口。

您可以使用HashMap中的复合键添加bean对象。我在您的bean中添加了
值,这是id和名称相同的bean的
值的列表

代码如下:

        HashMap<String, My_Bean> hashMap = new HashMap<String, My_Bean>();
        for(int i=0;i<elist.size();i++)
        {
            My_Bean obj = elist.get(i);

            String key = obj.getId()+"-"+obj.getName();

            if(hashMap.containsKey(key)){
                List<String> values = hashMap.get(key).getValues();
                if(values != null) {
                    hashMap.get(key).getValues().add(obj.getValue());
                }else{
                    hashMap.get(key).setValues(new ArrayList<String>());
                    hashMap.get(key).getValues().add(obj.getValue());
                }
            }
            else{
                hashMap.put(key, obj);
                hashMap.get(key).setValues(new ArrayList<String>());
                hashMap.get(key).getValues().add(obj.getValue());
            }
        }  
HashMap HashMap=newhashmap();
对于(int i=0;i试试这个

    Map<String, ArrayList<String>> resultMap = new HashMap<String, ArrayList<String>>();

    for (InputBean inputBean : inputBeanList)
    {
        String key = inputBean.getId() + "," + inputBean.getName();
        if (resultMap.containsKey(key))
        {
            resultMap.get(key).add(inputBean.getValue());
        }
        else
        {
            ArrayList<String> resultList = new ArrayList<String>();
            resultList.add(inputBean.getValue());
            resultMap.put(key, resultList);
        }
    }

    System.out.println("resultMap : " + resultMap);
Map resultMap=newhashmap();
for(InputBean InputBean:inputBeanList)
{
String key=inputBean.getId()+“,“+inputBean.getName();
if(结果映射containsKey(键))
{
resultMap.get(key).add(inputBean.getValue());
}
其他的
{
ArrayList resultList=新建ArrayList();
add(inputBean.getValue());
结果映射put(键,结果列表);
}
}
System.out.println(“结果映射:+resultMap”);

你的意思是你有id和名称以及值列表的组合键吗?@almasshaikh可能是的,我不确定对于给定的id,名称是否总是相同的?如果你想有一个字符串和数组的映射,例如map map=new HashMap();请投票支持使用containsKey,我忘记了。