Java 如何使用ArrayList从Hashmap打印值
我正在编写一段代码,它有一个Hashmap。此hashmap的键为字符串,值为arraylist。我使用使用DQL获取的值填充arraylist。对于许多用户,我有三个属性。然后将值放入hashmap。我想要的是迭代Hashmap并为1个用户获取3个属性集。让我提供下面的代码Java 如何使用ArrayList从Hashmap打印值,java,hashmap,documentum,dfc,documentum-dfc,Java,Hashmap,Documentum,Dfc,Documentum Dfc,我正在编写一段代码,它有一个Hashmap。此hashmap的键为字符串,值为arraylist。我使用使用DQL获取的值填充arraylist。对于许多用户,我有三个属性。然后将值放入hashmap。我想要的是迭代Hashmap并为1个用户获取3个属性集。让我提供下面的代码 package com; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java
package com;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import xtrim.util.i;
import com.documentum.com.DfClientX;
import com.documentum.com.IDfClientX;
import com.documentum.fc.client.DfQuery;
import com.documentum.fc.client.IDfClient;
import com.documentum.fc.client.IDfCollection;
import com.documentum.fc.client.IDfQuery;
import com.documentum.fc.client.IDfSession;
import com.documentum.fc.client.IDfSessionManager;
import com.documentum.fc.common.DfException;
import com.documentum.fc.common.DfLoginInfo;
import com.documentum.fc.common.IDfLoginInfo;
public class Adlookup {
IDfSessionManager sessionMrg = null;
IDfSession session=null;
IDfClient dfclient = null;
IDfClientX clientX = new DfClientX();
IDfCollection total = null;
int j;
int flag = 0;
WriteToExcel ex = new WriteToExcel();
public void LookupReport(String docbaseName, String username, String password) throws DfException, IOException
{
dfclient = clientX.getLocalClient();
String Docbase = docbaseName;
IDfLoginInfo loginInfo = new DfLoginInfo();
loginInfo.setUser(username);
loginInfo.setPassword(password);
sessionMrg = dfclient.newSessionManager();
sessionMrg.setIdentity(Docbase, loginInfo);
session = sessionMrg.getSession(Docbase);
System.out.println("connection created for adlookup");
String query = Getquery();
IDfQuery dql = new DfQuery();
dql.setDQL(query);
total = dql.execute(session, IDfQuery.DF_EXEC_QUERY);
System.out.println("all good for lookup");
//String[] columnNames = new String[] { "User Name","User Login Name","Email"};
List<String> lstValues = new ArrayList<String>();
Map<Integer, ArrayList<String>> myMap = new HashMap<Integer, ArrayList<String>>();
while (total.next())
{
lstValues.add(total.getString("uname")+","+total.getString("loginname")+","+total.getString("uadd"));
myMap.put(flag, (ArrayList<String>) lstValues);
flag++;
System.out.println("Flag value: " +flag);
// lstValues.clear();
}
Set setofKeys = myMap.keySet();
Iterator itr = setofKeys.iterator();
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.println("\nResult :"+value);
}
}
private String Getquery() {
// TODO Auto-generated method stub
String query = "select user_name as uname, user_login_name as loginname, user_address as uadd from dm_user dmu, dm_dbo.MV_V_MIDAS_MERCK_PRSN1 dma where upper(dmu.user_login_name)=upper(dma.isid) and dmu.user_state=0 and directory_display_ind='I'";
return query;
}
}
但我想要这样的东西:
Result : Sayre,Joseph,sayrej,joseph.sayre@abc.com
Result : Kapoor,Rohit,kapoorro,rohit.kapoor@abc.com
Result : Pineiros-Vallejo, Miguel,pineirom,rajendra.baxi@abc.com
我还需要在Excel工作表中打印这些值
任何形式的帮助都将不胜感激。不要在ArrayList本身上使用toString(),而是迭代其内容并打印单个成员。在while(itr.hasNext())循环中添加另一个循环。不要在ArrayList本身上使用toString(),而是迭代其内容并打印各个成员。在while(itr.hasNext())循环中添加另一个循环。如果ArrayList的内容是用户的属性,那么为什么不创建一个类
UserAttributes
,该类具有存储值的字段,并覆盖toString()
以输出它们?如果ArrayList的内容是用户的属性,那么为什么不创建一个类UserAttributes
,该类包含用于存储值的字段,并覆盖toString()
以输出它们呢?我将创建一个对象“user”,其中每个条目都包含字段:
lstValues.add(total.getString("uname")+","+total.getString("loginname")+","+total.getString("uadd"));
到
然后在User
对象内重写toString()
提示:
您还可以使用map.entrySet()进行迭代
您的代码:
Set setofKeys = myMap.keySet();
Iterator itr = setofKeys.iterator();
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.println("\nResult :"+value);
}
setofKeys=myMap.keySet();
迭代器itr=setofKeys.Iterator();
while(itr.hasNext())
{
整数键=(整数)itr.next();
ArrayList value=myMap.get(key);
System.out.println(“\n结果:+值);
}
我的代码:
Map<Integer, User> map = new HashMap<>();
for( Entry<Integer, User> entry : map.entrySet() ) {
entry.getKey();
entry.getValue(); // the user object you want
}
Map Map=newhashmap();
for(条目:map.entrySet()){
entry.getKey();
entry.getValue();//所需的用户对象
}
我会创建一个对象“user”,每个条目都有字段:
lstValues.add(total.getString("uname")+","+total.getString("loginname")+","+total.getString("uadd"));
到
然后在User
对象内重写toString()
提示:
您还可以使用map.entrySet()进行迭代
您的代码:
Set setofKeys = myMap.keySet();
Iterator itr = setofKeys.iterator();
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.println("\nResult :"+value);
}
setofKeys=myMap.keySet();
迭代器itr=setofKeys.Iterator();
while(itr.hasNext())
{
整数键=(整数)itr.next();
ArrayList value=myMap.get(key);
System.out.println(“\n结果:+值);
}
我的代码:
Map<Integer, User> map = new HashMap<>();
for( Entry<Integer, User> entry : map.entrySet() ) {
entry.getKey();
entry.getValue(); // the user object you want
}
Map Map=newhashmap();
for(条目:map.entrySet()){
entry.getKey();
entry.getValue();//所需的用户对象
}
使用advanced for来显示字符串值,如下所示
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.print("\nResult : ");
for(String strValue:value){
System.out.println(strValue + ",");
}
}
while(itr.hasNext())
{
整数键=(整数)itr.next();
ArrayList value=myMap.get(key);
系统输出打印(“\n结果:”);
for(字符串strValue:value){
System.out.println(标准值+“,”);
}
}
谢谢
Raju使用advanced for来显示字符串值,如下所示
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.print("\nResult : ");
for(String strValue:value){
System.out.println(strValue + ",");
}
}
while(itr.hasNext())
{
整数键=(整数)itr.next();
ArrayList value=myMap.get(key);
系统输出打印(“\n结果:”);
for(字符串strValue:value){
System.out.println(标准值+“,”);
}
}
谢谢
Raju代替
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.println("\nResult :"+value);
}
编辑:从使用itr对象切换到总对象。我看到您正在使用IDfCollection total
添加一些您以后不会在任何地方使用的标志。失去一切,只需循环收集total
。你的代码是你的临时想法的大混合物,这些想法在你改变主意时幸存了下来。更改您的代码。:) 而不是
while(itr.hasNext())
{
Integer key = (Integer) itr.next();
ArrayList<String> value = myMap.get(key);
System.out.println("\nResult :"+value);
}
编辑:从使用itr对象切换到总对象。我看到您正在使用
IDfCollection total
添加一些您以后不会在任何地方使用的标志。失去一切,只需循环收集total
。你的代码是你的临时想法的大混合物,这些想法在你改变主意时幸存了下来。更改您的代码。:) 你把责任混淆了。你看,你的方法LookupReport(更好地命名为LookupReport btw)。。。不应该做那么多事情。它应该收集这些信息。然后,其他一些方法可以进行打印。和另一种将数据插入excel工作表的方法。(提示:您不需要打印到工作表中-您需要插入数据)我首先创建一个类用户
,将映射
更改为映射
或映射
,如果每个键应有多个用户。我将继续重写新创建的类User
的toString
方法,以便在其中至少有一点OOP
和java约定。还有一个提示:使用Generics
将使您不必到处进行类型转换,而且您对每个映射条目都使用相同的列表,这显然不是有意的。但总的来说,上面的两条评论是完全正确的建议。代码中有太多的内容,但不清楚您实际上在寻找什么。我最好的猜测是,您的目标实际上是从查询中生成一个Excel dokument,但您正在询问如何将其很好地打印到命令提示符中。也许你会按照上面的建议去做,然后回来询问如何将这些值保存到Excel文档中。你把责任混淆了。你看,你的方法LookupReport(更好地命名为LookupReport btw)。。。不应该做那么多事情。它应该收集这些信息。然后,其他一些方法可以进行打印。和另一种将数据插入excel工作表的方法。(提示:您不需要打印到工作表中-您需要插入数据)我首先创建一个类用户
,将映射
更改为映射
或映射
,如果每个键应有多个用户。我将继续覆盖toSt