RSS-Feed anzeigen

Kategorielos

Blog-Einträge ohne Kategorie

  1. Erweiterte For-Schleife mit Index - III

    Man könnte angesichts der beiden Vorgänger-Beiträge vielleicht denken, dass das das Beste wäre, was man aktuell mit Java hinbekommt. Aber es heißt ja auch, man soll absteigen, wenn das Pferd tot ist, und in diesem Fall wäre das die erweiterte For-Schleife, die einfach nicht flexibel genug für unsere Ansprüche ist.

    Wenn man sich davon löst, ist eine bessere Version wirklich trivial zu schreiben und zu benutzen, und diese ist auch sehr performant:

    Java Code:
    1.  
    2. import java.util.function.ObjIntConsumer;
    ...

    Aktualisiert: 26.05.2016 um 10:09 von Landei

    Kategorien
    Kategorielos
  2. Erweiterte For-Schleife mit Index - II

    In meinem vorigen Beitrag zum Thema habe ich die Kritik geerntet, dass bei jedem Schleifendurchlauf ein neues Objekt erzeugt werden muss. Folgende Lösung ist ziemlich "hacky", vermeidet aber die Objekterzeugung.

    Java Code:
    1.  
    2. import java.util.Iterator;
    3.  
    4. public class IndexedIterable<T> implements Iterable<T> {
    5.  
    6.     private final Iterator<T> iterator;
    7.     private int index = -1;
    8.     private boolean used = false;
    ...
    Stichworte: java
    Kategorien
    Kategorielos
  3. Eine fehlende Optional-Methode und ein Workaround

    Ein wirklich hässliches Pattern, um mehrere Dinge auszuprobieren, bis eines davon klappt, ist:

    Java Code:
    1.  
    2. int x = ...
    3. int y = ...
    4. int z = ...
    5.  
    6. Integer result = null;
    7. if (x % 2 == 0) {
    8.     result = x / 2;
    9. }
    10. if (result == null && % 2 == 0) {
    11.     result = y / 2;
    12. }
    13. if (result == null && z % 2 == 0) {
    14.     result = z / 2;
    15. }
    16. String s = result == null
    17.     ? "all numbers
    ...
    Stichworte: java 8, optional
    Kategorien
    Kategorielos
  4. Erweiterte For-Schleife mit Index

    Wie oft braucht man den Index der Elemente eines Iterables und hat dann nur die Wahl zwischen...

    Java Code:
    1.  
    2. List<String> names = ...
    3. for(int i = 0; i < names.size(); i++) {
    4.    System.out.println((i+1) + ".\t" + names.get(i));
    5. }

    ... und ...

    Java Code:
    1.  
    2. List<String> names = ...
    3. int i = 0;
    4. for(String name : names) {
    5.    System.out.println((++i) + ".\t" + name);
    6. }
    ...

    Aktualisiert: 28.10.2015 um 15:17 von Landei

    Stichworte: iterator, java
    Kategorien
    Kategorielos
  5. Java-Kontrollstukturen nachgebaut - if

    Wieder so ein seltsamer Beitrag: Wozu sollte man Kontrollstrukturen nachbauen? Nun, selbst als reine Fingerübung lernt man einiges über die Möglichkeiten - und Unmöglichkeiten - der Sprache, aber die eigentliche Idee ist, einen soliden Ausgangspunkt für eigene Erweiterungen zu schaffen.

    Beginnen wir mit einer der einfachsten Kontrollstrukturen, nämlich if - else, und dem verwandten ternären Operator x ? y : z. Das klassische if ist leicht zu modellieren - die einzige Schwierigkeit ...

    Aktualisiert: 15.10.2015 um 17:09 von Landei

    Kategorien
    Kategorielos
  6. Zweimal ist einmal zuviel

    In diesem Post möchte ich einmal ein Designprinzip beleuchten, das dem bekannten "don't repeat yourself" ähnelt, aber damit nicht identlisch ist. Ich würde es "don't say it twice" nennen (auch wenn das kein hübsches Akronym bildet). Es geht darum, das Ding, an dem man gerade werkelt, nicht öfter zu nennen als unbedingt nötig. Der Grund ist simpel: Man muss solche Referenzen immer synchron halten, wodurch sie anfällig für Copy-Paste-Fehler sind, nämlich wenn man nach ...

    Aktualisiert: 28.07.2015 um 21:15 von Landei

    Kategorien
    Kategorielos
  7. Kleiner Optional-Trick in Java

    So froh ich über die Einführung von Optional in Java 8 bin, so ärgerlich ist dort das Fehlen von Methoden, die eigentlich selbstverständlich sein sollten. So renne ich öfter in die Situation, dass ich aus dem Optional keinen Wert zurückliefern möchte, sondern abschließend eine Aktion ausführen. Dafür gibt es die Methode ifPresent, die einen Consumer entgegennimmt. Das Problem ist, dass ich im Falle eines leeren Optionals keine Default-Aktion angeben kann.

    Zur Veranschaulichung ein ...
    Kategorien
    Kategorielos
  8. Dependency Injection mit der Reader-Monade

    Schon wieder nehme ich das böse M-Wort in den Mund! Dabei ist die Reader-Monade kaum mehr als eine einfache Function. Aber eins nach dem anderen.

    Zuerst einmal das Datenmodell mit einem Fake-Service:

    Java Code:
    1.  
    2. public class User {
    3.     public long id;
    4.     public String name;
    5.  
    6.     public User(String name, long id) {
    7.         this.id = id;
    8.         this.name = name;
    9.     }
    10. }
    11.  
    12. public interface UserService {
    ...

    Aktualisiert: 27.03.2015 um 09:40 von Landei

    Kategorien
    Kategorielos
  9. Das Monoid, dein Freund und Helfer

    Was zur Hölle ist ein Monoid? Nun, eigentlich eine binäre Operation samt eines neutralen Elements.In Java 8 schreiben wir es deshalb am besten als Unter-Interface von BinaryOperator, der wiederum eine Spezialisierung von BiFunction ist:

    Java Code:
    1.  
    2. public interface Monoid<A> extends BinaryOperator<A> {
    3.  
    4.    @Override
    5.    A apply(A a1, A a2);
    6.  
    7.    A identity();
    8.  
    9.    ... //wird unten fortgesetzt
    10. }

    Das ...
    Kategorien
    Kategorielos
  10. Und wieder mal die Damen

    Ja, ich weiß, ich habe [in meinem eSCALAtion Blog] versprochen, die 8 Damen in Ruhe zu lassen. Aber als das geschrieben hatte, war funktionale Programmierung in Java so unbequem, dass ich nicht gedacht hätte, dass man auch nur ansatzweise einmal eine Übersetzung aus Haskell wagen kann. Zur Erinnerung, das hier was mein Ausgangspunkt:

    Code:
    nqueens :: Int -> [[(Int,Int)]] 
    nqueens n = foldr qu [[]] [1..n]
        where qu k qss = [ ((j,k):qs) | qs <- qss, j <-
    ...
    Kategorien
    Kategorielos
  11. Die Grenzen der Vererbung

    Vererbung ist eines der nützlichsten Konzepte, um Code-Duplikation zu vermeiden, und komplexe Zusammenhänge im Typsystem abzubilden. Das Problem mit Vererbung - so wie sie in Java gehandhabt wird - ist, dass es mehrere, sehr unterschiedliche Aspekte untrennbar miteinander vereint, und das nicht unbedingt dem jeweiligen Anwendungsfall entspricht. Zum einen haben wir die Schnittstellen-Vererbung, wobei "Schnittstelle" hier die von einem Typ angebotenen Methoden mit ihren spezifischen Signaturen ...

    Aktualisiert: 19.12.2014 um 21:29 von Landei

    Kategorien
    Kategorielos
  12. Ein Builder-Variante mit Initialisierungsblöcken

    Eines der weniger oft genutzen Java-Features sind Initialisierungsblöcke. Aber wenn sie dann einmal gebraucht werden, können sie ziemlich nützlich sein. Vielleicht auch, um Builder zu schachteln? Und wie könnte das aussehen?

    Nehmen wir an, wir müssten eine einfache hierarchische Struktur aufbauen: Eine Menü-Leiste, darin Menüs, und in diesen wiederum Menüpunkte. Mit Initialisierungsblöcken könnte der Aufruf dann so aussehen:

    Java Code:
    1.  
    2. MenuBarBuilder menuBarBuilder = new
    ...

    Aktualisiert: 12.11.2014 um 23:34 von Landei

    Kategorien
    Kategorielos
  13. Casts mit zusätzlichen Bounds in Java 8

    Immer wieder beschert mir Java wundervolle WTF-Momente, so auch heute. Eine Syntaxerweiterung in Java 8, die komplett an mir vorbeigegangen ist, sind Casts mit zusätzlichen Bounds:

    Java Code:
    1.  
    2. LinkedList<String> list = new LinkedList<>();
    3. List<String> list1 = (List & Queue) list; //OK
    4. List<String> list2 = (List & RandomAccess) list; //ClassCastException

    Die JLS schreibt dazu recht lakonisch :

    If
    ...
    Kategorien
    Kategorielos
  14. Lambda-Pingpong

    Heute ein kleines Puzzle: Angenommen, wir haben zwei indirekt rekursive Funktionen, die sich gegenseitig aufrufen:

    Java Code:
    1.  
    2. static boolean isEven(int a ) {
    3.     return a == 0 ? true : isOdd(a-1);
    4. }
    5.  
    6. static boolean isOdd(int a ) {
    7.     return a == 0 ? false : isEven(a-1);
    8. }

    Natürlich würde das in diesem Fall kein normaler Mensch so schreiben, aber immerhin ist das Beispiel einfach genug, um sofort zu sehen, wie das Ganze ...
    Kategorien
    Kategorielos
  15. Das "Fluent Decorator Pattern"

    Ich lese gerade "DSLs in Action", und natürlich wird dort auch das Decorator-Pattern erwähnt. Das Beispiel sieht ungefähr so aus:

    Java Code:
    1.  
    2. Trade trade = new DeductCommisions(
    3.    new DeductTaxes(
    4.      new Trade()));

    Jedem, der schon einmal mit Java's I/O-Streams gearbeitet hat, wird das bekannt vorkommen. Nun wurde im Buch beklagt, dass diese Reihenfolge unnatürlich ist. Tatsächlich neigen wir ja eher dazu, andersherum zu denken: Nimm ...

    Aktualisiert: 09.08.2014 um 11:36 von Landei

    Kategorien
    Kategorielos
Seite 1 von 2 1 2 LetzteLetzte