lokale Variable bei Optional verwenden

Harald123

Mitglied
Hallo zusammen,

ist es möglich bei diesem Ausdruck den Wert der lokalen Variable i trotzdem zu ändern?

Hier gibt es bei Zeile 6 und 8 den Fehler:
The final local variable i cannot be assigned, since it is defined in an enclosing type

[CODE lang="java" title="Optional ifpresentorelse" highlight="6, 8"] final int i;

final Optional<String> emptyOptional = Optional.empty();

emptyOptional.ifPresentOrElse((c) -> {
i = 2;
}, () -> {
i = 2;
});[/CODE]

Vielen Dank!





 
Beste Antwort
Ein gutes altes if-else Konstrukt ist eigentlich hier am saubersten, aber wenn du schon fragst:
Java:
final int i = opt.map(s -> {
  System.out.println("if");
  return 2;
}).orElseGet(() -> {
  System.out.println("else");
  return 3;
});
Ja, es war als Beispielbelegung gedacht.

Die vorgeschlagenen Lösungen funktionieren, vielen Dank!
Nur waren im originalen Code auch weitere Anweisungen dabei, zB:

Java:
final int i;

        final Optional<String> emptyOptional = Optional.empty();

        emptyOptional.ifPresentOrElse((c) -> {
            i = 2;
            System.out.print("if");
        }, () -> {
            i = 3;
             System.out.print("else");
        });

Ist so etwas bei
Java:
final int i = opt.map(s -> 2).orElse(3);
möglich ? Habe es über eine zusätzliche Methode geschafft, wollte es jedoch lieber in diesem Block haben.

Mit einer Instanzvariable geht alles mit ifPresentOrElse wunderbar , nur es entstand ein anderes Problem, das jetzt hier nicht relevant ist.
 
Ein gutes altes if-else Konstrukt ist eigentlich hier am saubersten, aber wenn du schon fragst:
Java:
final int i = opt.map(s -> {
  System.out.println("if");
  return 2;
}).orElseGet(() -> {
  System.out.println("else");
  return 3;
});
 
Beste Antwort
[CODE lang="java" title="Lösung mit Array (hässlich)"]public static void main(String[] args) {

final int[] holderArray = new int[1];

final Optional<String> emptyOptional = Optional.empty();

emptyOptional.ifPresentOrElse((c) -> {
holderArray[0] = 2;
System.out.print("if");
}, () -> {
holderArray[0] = 3;
System.out.print("else");
});

}
[/CODE]
 
[CODE lang="java" title="Lösung mit Halter-Klasse (mutable int)"]static class IntHolder {
public int value;
}

public static void main(String[] args) {

final IntHolder intHolder = new IntHolder();

final Optional<String> emptyOptional = Optional.empty();

emptyOptional.ifPresentOrElse((c) -> {
intHolder.value = 2;
System.out.print("if");
}, () -> {
intHolder.value = 3;
System.out.print("else");
});
}
[/CODE]
 

Neue Themen


Zurück
Oben