在某些条件下选择列表上的映射

时间:2013-05-23 14:37:28

标签: java

我有以下方法,我在其中创建多个列表和计数器。 从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。

2 个答案:

答案 0 :(得分:2)

列表在这里仍然有意义。地图用于关联不同的键和值,同时跟踪不同对象的列表。我会说你需要摆脱计数器,因为它们不需要。如果您需要特定列表的计数,只需拨打List.size()

如果您愿意,您仍然可以使用这样的地图:Map<String, List<abcIdentifierObject>>。键是常量定义如下:“成功,失败,ExceptionBoa,SuccessfulBoaSettlement”。 但是,由于您的密钥是有限的并且已经定义,因此它不会产生太大的影响。如果不是更多的话,它就会变得冗长。

坚持使用这些列表,请按照评论中提到的naming conventions进行操作。

答案 1 :(得分:0)

地图和列表是非常不同的概念。

当您需要(一种)对象的有序集合时选择一个列表。

如果要存储关系,将键(一种类型的对象)与值(另一种类型的对象)相关联,请使用Map。

这些之间几乎没有重叠。如果要存储关系,请使用Map;否则,不要!