2016-06-14 3 views
-3

Ich habe mehrere öffentliche Methoden, die auf Rabatte überprüfen, möchte ich den Code nicht mehrmals wiederholen und nur den Großteil des Codes in einer privaten Methode, die die öffentlichen Methoden zugreifen können. Hier ist der Code. Ist das möglich?Lassen Sie mehrere öffentliche Methoden durch den Aufruf von privaten verkürzt

public static boolean isE1(WebOrder order) 
    { 
    if(order.getPromos().stream().filter(i -> E1.contains(i.toUpperCase())).findFirst().isPresent()) 
    { 
    return true; 
    } 
    else 
    { 
    List<Discount> discounts = new LinkedList<>(); 

    order.getItems().forEach(i -> discounts.addAll(i.getDiscounts())); 

    if(!discounts.isEmpty()) 
    { 
     return discounts.stream() 
      .filter(i -> E1.contains(i.getCode().toUpperCase())) 
      .findFirst() 
      .isPresent(); 
    } 
    else 
    { 
     return false; 
    } 
    } 
} 
    public static boolean isE2(WebOrder order) 
    { 
    if(order.getPromos().stream().filter(i -> E2.contains(i.toUpperCase())).findFirst().isPresent()) 
    { 
    return true; 
    } 
    else 
    { 
    List<Discount> discounts = new LinkedList<>(); 

    order.getItems().forEach(i -> discounts.addAll(i.getDiscounts())); 

    if(!discounts.isEmpty()) 
    { 
     return discounts.stream() 
       .filter(i -> E2.contains(i.getCode().toUpperCase())) 
       .findFirst() 
       .isPresent(); 
    } 
    else 
    { 
     return false; 
    } 
    } 

}

+2

ja? Was fragst du konkret? – pvg

+1

Sicher können sie. Geben Sie es eine Chance, und wenn Sie in Schwierigkeiten geraten, posten Sie eine Frage zu dem spezifischen Problem, das Sie stoßen. –

+0

Ich sehe keinen Unterschied zwischen E1 und E2. Warum brauchen Sie mehrere Methoden? – micker

Antwort

1

Ja, es ist möglich:

Nur eine Methode mit privaten static starten.

public static boolean isE2(WebOrder order) 
{ 
    yourMethod(order); 
} 

private static yourMethod(WebOrder order){ 
    //your code 

    if(order.getPromos().stream().filter(i -> E1.contains(i.toUpperCase())).findFirst().isPresent()) 
{ 
    return true; 
} 
else 
{ 
    List<Discount> discounts = new LinkedList<>(); 

order.getItems().forEach(i -> discounts.addAll(i.getDiscounts())); 

if(!discounts.isEmpty()) 
{ 
    return discounts.stream() 
     .filter(i -> E1.contains(i.getCode().toUpperCase())) 
     .findFirst() 
     .isPresent(); 
} 
else 
{ 
    return false; 
    } 
} 
} 
+0

Wie könnte ich alle drei Rabatte mit der privaten statischen verwenden? – Norcal

+0

@Norcal Nur den gemeinsamen Teil in der Methode hinzufügen! Ändern Sie dann den Wert in den beiden von Ihnen geposteten Methoden. –

+0

Okay, also sagen wir, ich habe privaten statischen endgültigen Set E1 = Collections.UnmodifiableSet (neue HashSet <> (Arrays.asList ("E1-Associate"))); und ein anderer, die E2-Rabatt-Codes regelt ... wäre es möglich, dieses Format zu verwenden, um mit sagen läßt private static final Set PARENT_DISCOUNT = an = der E1 und E2-String? – Norcal

Verwandte Themen