Potrzebuje pomocy w zrozumieniu tego jak działają zmienne atomowe.
ostatnio spotkałem się z pewnym rozwiązaniem stosującym metodę .getAndSet.
AtomicBoolean first = new AtomicBoolean(false);
streamOfCompany()
.map(Company::getName)
.collect(Collector.of(StringBuilder::new,
(stringBuilder, s) -> {
System.out.println(first);
if (first.getAndSet(true)) {
stringBuilder.append("+");
}
stringBuilder.append(s);
},
StringBuilder::append,
StringBuilder::toString));
Nie rozumiem w jakie sposób metoda .getAndSet wywołana na zmiennej typu AtomicBoolean naprzemiennie zwraca true i false.
Tym bardziej, że jeśli wywołuję tą metodę poza strumieniem to zawsze zwraca true (z wyjątkiem pierwszego razu ofcourse)
AtomicBoolean first = new AtomicBoolean(false);
System.out.println("+++++++++++++");
System.out.println("first: " + first);
System.out.println("first result getAndSet is " + first.getAndSet(true));
System.out.println("first: " + first);
System.out.println("second result getAndset is: " + first.getAndSet(true));
System.out.println("third getAndSet: " + first.getAndSet(true));
System.out.println("fourth getAndSet: " + first.getAndSet(true));