私はいくつかの複雑なfor
andif
ステートメントを含むメソッドを持っています。アプリはまだ開発中であるため、リソースの使用はまだ重要ではありませんが、非常に重く見えるため、最適化する方法があるかどうか疑問に思っていました.
それはすべてこれに帰着します: 複数の 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(){}}
を悩ませ、それをより効率的で読みやすいものにする方法があるかどうか疑問に思っていましたか?