Java 将列表转换为字符串的HasMap&;ArrayList
我使用Java1.6。 我在ArrayList上有一个迭代器。对于每个JavaBean,它以下面的格式返回值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(也
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,我忘记了。