-5

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

我将更正命名约定,但这次的重点是如何删除我在内部使用的许多数组列表。

4

2 回答 2

2

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

如果你愿意,你仍然可以使用这样的地图:Map<String, List<abcIdentifierObject>>. 键将是如下定义的常量:“Successful、Failure、ExceptionBoa、SuccessfulBoaSettlement”。但是,它不会有太大的不同,因为您的密钥是有限的并且已经定义。如果不是更多的话,它会同样冗长。

坚持使用列表,请遵循评论中提到的命名约定。

于 2013-05-23T15:09:33.197 回答
0

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

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

当您想要存储关系时使用映射,将键(一种类型的对象)与值(另一种类型的对象)相关联。

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

于 2013-05-23T15:09:55.200 回答