我有以下方法,我在其中创建多个列表和计数器。 从Java的角度来看,我不认为这是正确的方法。我曾是 我想我可以使用具有键值对的地图,并且应该有键 它的值类型是一个列表。你可以告诉我下面的代码怎么样 更改为使用地图,以及如何编辑它以使其更多 有意义。
public Map<String, Object> abclistcount(String Id)
{
List<abcIdentifierabcobject> successfulboaabcIdentifierabcobjects = new ArrayList <abcIdentifierabcobject>();
List<abcIdentifierabcobject> failureboaabcIdentifierabcobjects = new ArrayList <abcIdentifierabcobject>();
List<abcIdentifierabcobject> exceptionboasettlement = new ArrayList <abcIdentifierabcobject>();
List<abcIdentifierabcobject> successfulboasettlement = new ArrayList <abcIdentifierabcobject>();
HashMap<String, Object> data = new HashMap<String, Object>();
List<defInfo> reportData = new ArrayList<defInfo>();
List<abcIdentifierabcobject> abcIdentifierabcobjects = futuresFeedHome.getabcIdentifierabcobjects(fileIdentifier);
//counter to track
int failurecounterboafeed = 0;
int failurecounterboasettlement =0;
int sucessboasettlement =0;
int successboacount=0;
if (abcIdentifierabcobjects !=null && abcIdentifierabcobjects.size()>0)
{
for (abcIdentifierabcobject f : abcIdentifierabcobjects)
{
defInfo abjkfeed = new defInfo();
// INVALID_STATIC_DATA fails at boa_futures feed side itself
if ("INVALID_STATIC_DATA".equalsIgnoreCase(f.getStatus()) /* INVALID RECORD*/)
{
failureboaabcIdentifierabcobjects.add(f) ;
failurecounterboafeed++;
abjkfeed.setHeader("Futures Intraday Report");
abjkfeed.setData(failureboaabcIdentifierabcobjects);
reportData.add(abjkfeed);
}
//if not fail in boa_futures_feed then
successfulboaabcIdentifierabcobjects.add(f);
successboacount++;
}
for (abcIdentifierabcobject f : successfulboaabcIdentifierabcobjects)
{
Settlement settlement = f.getSettlement();
//tracking the records that are fail on boa_settlement side
//futher filtering fail at GEN EX queue or Awaiting ack
if (fwqConstants.AF_T_ZY_SETTLEMENT_EXCEPTION.equalsIgnoreCase(settlement.getCurrentWFQueue()) || fwqConstants.AF_T_ZY_SETTLEMENT_SENT_EX.equalsIgnoreCase(settlement.getCurrentWFQueue()))
{
exceptionboasettlement.add(f);
failurecounterboasettlement++;
}
defInfo successfulpayments = new defInfo();
//seprating the successful list of boa_settlement one in a seprate list
if (fwqConstants.AF_T_ZY_COMPLETED.equalsIgnoreCase(settlement.getCurrentWFQueue()) || fwqConstants.AF_T_ZY_SETTLEMENT_CREATED.equalsIgnoreCase(settlement.getCurrentWFQueue()))
{
successfulboasettlement.add(f);
sucessboasettlement++;
successfulpayments.setHeader("Successful Payments");
successfulpayments.setData(successfulboasettlement);
reportData.add(successfulpayments);
}
}
}
return data;
}
我将更正命名约定,但这次重点是如何删除我在内部使用的许多arraylists。
答案 0 :(得分:2)
列表在这里仍然有意义。地图用于关联不同的键和值,同时跟踪不同对象的列表。我会说你需要摆脱计数器,因为它们不需要。如果您需要特定列表的计数,只需拨打List.size()
。
如果您愿意,您仍然可以使用这样的地图:Map<String, List<abcIdentifierObject>>
。键是常量定义如下:“成功,失败,ExceptionBoa,SuccessfulBoaSettlement”。
但是,由于您的密钥是有限的并且已经定义,因此它不会产生太大的影响。如果不是更多的话,它就会变得冗长。
坚持使用这些列表,请按照评论中提到的naming conventions进行操作。
答案 1 :(得分:0)
地图和列表是非常不同的概念。
当您需要(一种)对象的有序集合时选择一个列表。
如果要存储关系,将键(一种类型的对象)与值(另一种类型的对象)相关联,请使用Map。
这些之间几乎没有重叠。如果要存储关系,请使用Map;否则,不要!