1

私はいくつかの複雑なforandifステートメントを含むメソッドを持っています。アプリはまだ開発中であるため、リソースの使用はまだ重要ではありませんが、非常に重く見えるため、最適化する方法があるかどうか疑問に思っていました.

それはすべてこれに帰着します: 複数の mapsObjectがある場合、オブジェクトの 1 つの (既知の) フィールドの値をチェックする方法はありますか? その値が満たされている場合は、反復せずにそれらすべてを同じ値で更新します。私の地図は何度も。

これがコードです

private Map<Integer, Reservation> CreerMapFax(HttpServletRequest request, HttpSession session)
{
    // Get the "keys" parameter array from the request
    // and makes an array of integers
    String[] strKeys = request.getParameterValues("keys");
    Integer[] intKeys = new Integer[strKeys.length];
    for (int i = 0; i < strKeys.length; i++)
        intKeys[i] = Integer.parseInt(strKeys[i]);

    // Creates Map (1) of the selected bookings that need to be faxed,
    // gets Map (2) of all registered bookings within session
    // and fill (1) with data from (2)
    // by using the keys stored in the array
    boolean mail = true;

    Map<Integer, Booking> mapFax = new HashMap<Integer, Booking>();
    Map<Integer, Booking> bookings=
            (HashMap<Integer, Booking>) session.getAttribute(SESSION_BOOKINGS);

    for (int i = 0; i < intKeys.length; i++)
    {
        Booking booking = bookingss.get(intKeys[i]);
        if (!booking.getMailing())
            mail = false;

        // Some updating done here on "booking"
        ...

        // Overwrite old map values with new ones
        bookings.put(intKeys[i], booking);
        mapFax.put(intKeys[i], booking);

    }

    // mail == false whenever at least one of the booking
    // stored in the map had their getMailing() method return false

    if (!mail)
    {
        for (int j = 0; j < intKeys.length; j++)
        {
            // Updates AGAIN !
            Booking booking = mapFax.get(intKeys[j]);
            booking.setMailing(false);
            mapFax.put(intKeys[j], booking);
            reservations.put(intKeys[j], booking);
        }
    }

    session.setAttribute(SESSION_BOOKINGS, BOOKINGS);
    return mapFax;
} 

基本的に、これが目的とすることは (Bookingオブジェクトの他のフィールドを更新し、さらに処理するためにマップを返すことは別として) 、少なくとも 1 つmapFaxのオブジェクトの値が に設定されている場合、すべてのオブジェクトの郵送フィールドを false に設定することです。mapFax間違い。

for(){if(){}}が続く場合、何が私if(){for(){}}を悩ませ、それをより効率的で読みやすいものにする方法があるかどうか疑問に思っていましたか?

4

2 に答える 2

1

最初にメールフラグを探し(見つかったらループを壊します)、次にすべての更新をすべて1つのループで行います...

このようなもの...

...
for (int i = 0; i < intKeys.length; i++)
{
    Booking booking = bookingss.get(intKeys[i]);
    if (!booking.getMailing())
    {
        mail = false;
        break;
     }
}
....
for (int i = 0; i < intKeys.length; i++)
{
    // Some updating done here on "booking"
    ...     
    if (!mail)
    {
        ...
    }
    ...
  // Overwrite old map values with new ones
    bookings.put(intKeys[i], booking);
    mapFax.put(intKeys[i], booking);
}    
于 2013-03-19T15:47:31.160 に答える
0
private Map<Integer, Reservation> CreerMapFax(HttpServletRequest request, HttpSession session) {
    String[] strKeys = request.getParameterValues("keys");
    Integer[] intKeys = new Integer[strKeys.length];
    for (int i = 0; i < strKeys.length; i++) {
        intKeys[i] = Integer.parseInt(strKeys[i]);
    }

    boolean mail = true;

    Map<Integer, Booking> mapFax = new HashMap<Integer, Booking>();
    Map<Integer, Booking> bookings= (HashMap<Integer, Booking>) session.getAttribute(SESSION_BOOKINGS);

    for (Integer intKey : intKeys) {
        Booking booking = bookingss.get(intKey);
        if (!booking.getMailing()) {
            mail = false;
            break;
        }
    }

    for(Integer intKey : intKeys) {
        Booking booking = mapFax.get(intKey);
        mapFax.put(intKey, booking);
        if(!mail) {
            booking.setMailing(false);
            reservations.put(intKey, booking);
        }
    }

    session.setAttribute(SESSION_BOOKINGS, BOOKINGS);
    return mapFax;
} 
于 2013-03-19T15:58:19.700 に答える