Streams als Alternative für dieses Problem ?

F

fireGlurak

Mitglied
Hallo,

ich habe 2 Listen die in etwa so aufgebaut sind

List_1
obj1
->id: 5
->data1: a
->data2: b
->data3: c
...
obj3
->id: 9
->data1: d
->data2: e
->data3: f
...
obj3
->id: 3
->data1: g
->data2: h
->data3: i
...

List_2
obj1
->id:9
.....
obj2
->id:5
.....

Mein Ziel ist es, dass ich data1 aus Liste_1 auslese und in Liste_2 packe. Hierbei wird über die jeweilige ID referenziert. Ich erwarte also folgendes Ergebnis

List_2
obj1
->id:9
->data1: d
obj2
->id:5
->data1:a

Der Lösungsweg sieht aktuell in etwa so aus

Ich iteriere über List_2 und erstmiitle das Objekt über eine Funktion die in etwa so aufgebaut ist

Java:
    private myClass getData1(Short id, List<myClass> list) {
        boolean objGefunden = false;
        int index = 0;
        myClass data1 = null;
       
        while (!objGefunden) {
            if (id.equals(list.get(index).getId())) {
                objGefunden = true;
                data1 = list.get(index).getData1();
            }
            index++;
        }
        return data1
    }

Das funktioniert bisher auch alles wunderbar! Was ich mich jetzt allerdings frage: Ich habe vor einiger Zeit meine ersten Gehversuche mit Streams gemacht und würde gerne wissen ob sich dies evtl. auch eleganter über Streams lösen lässt. Kann dazu jemand was sagen ? Mir würde bei dieser Problemstellung leider auch ein wenig der Ansatz fehlen :(

LG
 
kneitzel

kneitzel

Top Contributor
Also erst einmal bekommst Du doch eine Exception, wenn Du nach einer id suchst, die nicht vorhanden ist. Bei so Code würde ich also die while Schleife nicht mit !objGefunden laufen lassen (Wenn Du es gefunden hast, dann willst Du ja raus gehen), sondern ich würde prüfen, dass index < als die Länge der Liste ist.

Dann solltest Du Daten sinnvoll vorhalten. Wenn Du da Daten auf Basis der Id zugreifen können willst, dann wäre eine Map besser geeignet.

Und mit Streams kannst Du da durchaus auch was machen, aber das wird nicht wirklich lesbarer. Zum suchen streamst Du, filterst um dann findFirst oder findAny.
 
mihe7

mihe7

Top Contributor
Und mit Streams kannst Du da durchaus auch was machen, aber das wird nicht wirklich lesbarer.
Da möchte ich widersprechen, zumal man an seinem Code sieht, dass man leicht Fehler einbauen kann.

Ein
Java:
private Optional<myClass> getData1(Short id, List<myClass> list) {
    return list.stream()
            .filter(elem -> id.equals(elem.getId()))
            .map(myClass::getData1)
            .findFirst();
}
finde ich lesbarer als die Schleife.
 
kneitzel

kneitzel

Top Contributor
Da möchte ich widersprechen,
Da hast Du vermutlich übersehen, dass es nicht nur um das Suchen in der Liste ging. Das ist ja nur ein Teilaspekt.

Es geht darum, dass Du eine Liste2 hast und da für jedes Element das heraus suchen wills. Das Codebeispiel vom TE war ja offensichtlich nur ein kleiner Teilbereich. Also wird es da sowas wie ein:
Java:
private void mergeData(List<MyClass2> list1, List<MyClass2> list2) {
    list2.stream()
        .forEach(elem -> elem.data1 = list.stream()
                 .filter(elem -> id.equals(elem.getId()))
                 .map(myClass::getData1)
                 .findFirst()
                 .orElse(null);
}
Und so verschachtelte Dinge finde ich persönlich nicht gut (Wobei das jeder so sehen kann, wie er es möchte. .

Und Kern ist: Auch bei der Suche finde ich ein map.get(id) deutlich lesbarer als den typischen Stream zum suchen eines Wertes.

Aber ja: Das reine Suchen in einer Liste ist der typische Stream, den ich auch einsetze. Wobei der Code nicht wirklich unleserlicher ist:
Java:
private Optional<myClass> getData1(Short id, List<myClass> list) {
    for (myClass elem: list) {
        if (id.equals(elem.getId())) return Optional.of(elem.getData1());
    }
    return Optional.empty();
}
Wobei das an Dein Optional basiertes Beispiel geht. Beim TE wäre das dann sowas:

Java:
private Optional<myClass> getData1(Short id, List<myClass> list) {
    for (myClass elem: list) {
        if (id.equals(elem.getId())) return elem.getData1();
    }
    return null;
}

Ich würde bei so einer einfachen Suche auch einen Stream verwenden, aber ich würde da nicht wirklich mich hinsetzen und all solche Stellen in einem Projekt umschreiben (Das ist bei der Fragestellung für mich pers. das Kriterium, an Hand dessen ich entscheide).
 
mihe7

mihe7

Top Contributor
Da hast Du vermutlich übersehen, dass es nicht nur um das Suchen in der Liste ging.
Das habe ich schon gesehen, ich habe Dich vermutlich nur falsch verstanden, weil für mich Deine Aussage "wird nicht lesbarer" im Zusammenhang mit "Zum suchen streamst Du, filterst um dann findFirst oder findAny." stand.

Und so verschachtelte Dinge finde ich persönlich nicht gut (Wobei das jeder so sehen kann, wie er es möchte. .
Ne, das kann man nicht so sehen wie man will. Das ist einfach übel :)

aber ich würde da nicht wirklich mich hinsetzen und all solche Stellen in einem Projekt umschreiben
Wer macht sowas?
 
kneitzel

kneitzel

Top Contributor
Das überrascht mich jetzt (Ohne Wertung). Refactorings gehören für mich zum Tagesgeschäft. Wenn ich eine Stelle finde, die ich nicht leserlich finde, dann gibt es direkt ein Refactoring (Soweit möglich). Das ist teilweise sogar nur ein Mausklick entfernt (IntelliJ bietet da einiges an - in Visual Studio (c#) war mein erster Kontakt zu neuen Lambdas und so die Refactorings vom Resharper. Da hat er dann was angeboten ... man hat es mal durchgeführt und dann geschaut: Ist es gut lesbar? Wenn ja: lassen, sonst rückgängig machen :)

Ist das bei Dir / Euch weniger üblich? Wie geht ihr da generell vor? Gibt ja einige Refactorings incl. Renaming von Bezeichnern und so ...

Das bedeutet ja nicht, dass ich gezielt suche, sondern ich komme über etwas, weil ich damit zu tun habe. Und dann wird - soweit möglich - auch "aufgeräumt". (So es durch Tests abgesichert ist. Legacy Code ohne ausreichende Unit Tests sieht natürlich anders aus ...)
 
mihe7

mihe7

Top Contributor
Das bedeutet ja nicht, dass ich gezielt suche, sondern ich komme über etwas, weil ich damit zu tun habe.
Eben, das ist auch was ganz anderes als "hinsetzen und all solche Stellen in einem Projekt umschreiben". Ich gehe ja nicht hin und überlege mir: hey, jetzt (ok, 2014...) haben wir Streams, lass uns mal den Code nach for-Schleife durchsuchen und schauen, ob wir die irgendwie umgeschrieben bekommen... :)

Ist das bei Dir / Euch weniger üblich? Wie geht ihr da generell vor?
Ganz einfach: wenn was auffällt, wird es geändert - sofern es sich auf die Schnelle ändern lässt. Sonst gibts ein Ticket.
 
kneitzel

kneitzel

Top Contributor
Eben, das ist auch was ganz anderes als "hinsetzen und all solche Stellen in einem Projekt umschreiben". Ich gehe ja nicht hin und überlege mir: hey, jetzt (ok, 2014...) haben wir Streams, lass uns mal den Code nach for-Schleife durchsuchen und schauen, ob wir die irgendwie umgeschrieben bekommen... :)
Das war so nicht impliziert in der Aussage. Diesbezüglich war es missverständlich ausgedrückt.

Aber die Schleife, die ich dann gezeigt habe (nicht die Version des TE): Du machst in der Klasse, in der diese Methode ist etwas: Würdest Du da ein Refactoring machen?

So Stellen würde ich tatsächlich so stehen lassen, denn ich sehe da nicht wirklich eine Verbesserung, die das rechtfertigen würde.

Und da ich da gerade noch einmal auf den Code geschaut habe, ist mir aufgefallen, dass ich vergessen habe den Rückgabetyp anzupassen in der Variante, in der null erlaubt wäre:
Java:
private myClass getData1(Short id, List<myClass> list) {
    for (myClass elem: list) {
        if (id.equals(elem.getId())) return elem.getData1();
    }
    return null;
}

Und dann stelle ich mit Schrecken fest, dass ich auch komplett gepennt habe beim kopieren von Code. Der prameter id könnte ja null sein und das würde zu einer NPE führen, daher sollte das dann eher ein Objects.equals gemacht werden:
Java:
private myClass getData1(Short id, List<myClass> list) {
    for (myClass elem: list) {
        if (Objects.equals(id, elem.getId())) return elem.getData1();
    }
    return null;
}
 
mihe7

mihe7

Top Contributor
Würdest Du da ein Refactoring machen?
Nein, ich verwende Streams auch eher spartanisch. Würde ich den Code neu schreiben, könnte es allerdings schon sein, dass ich auf einen Stream zurückgreife. Manchmal gefällt mir der Stream besser, manchmal die Schleife.

Deine Schleife ist auch gut lesbar, da gibt es keinen Grund, etwas umzuschreiben. Bei der Urschleife aus #1 dagegen muss man erstmal schauen, was da eigentlich abläuft: ein boolean, der ebenso gesetzt wird, wie data1. Man muss also Schleifenbedingung, Variable und Rückgabewert im Auge behalten, um zu checken, wann was gefunden wird. Ja, ok, ich bin es gewohnt, Schleifen zu lesen, die Schleife ist nicht groß, man sieht noch relativ schnell, worum es geht. Vermutlich würde ich nicht mal den Code aus #1 umstrukturieren. Ich sage nur, dass die Stream-Variante durchaus lesbarer ist als der Code aus #1.
 
kneitzel

kneitzel

Top Contributor
Dann bleibt mir jetzt nur noch, Danke zu sagen, dass Du Dir die Zeit für diese Erläuterungen genommen hast. Ist für mich halt doch immer interessant, sich auch etwas zu vergleichen und verschiedene Sichtweisen mit zu bekommen (Auch wenn hier die Sichtweisen eher weniger verschieden sind sondern mehr meine ungenauen Aussagen Auslöser waren).
 
F

fireGlurak

Mitglied
Hallo,

vielen Dank erstmal für die Antworten
Also erst einmal bekommst Du doch eine Exception, wenn Du nach einer id suchst, die nicht vorhanden ist. Bei so Code würde ich also die while Schleife nicht mit !objGefunden laufen lassen (Wenn Du es gefunden hast, dann willst Du ja raus gehen), sondern ich würde prüfen, dass index < als die Länge der Liste ist.
Ja könnte eine Exception entsprechend abfangen, allerdings ist dies im Kontext dieser Anwendung nicht unbedingt nötigt, da es nicht sein kann/wird, dass es eine ID nicht geben wird.

Dann solltest Du Daten sinnvoll vorhalten. Wenn Du da Daten auf Basis der Id zugreifen können willst, dann wäre eine Map besser geeignet.

Ja eine Map ist mir auch schon in den Sinn gekommen, allerdings ist dies leider nicht ganz so einfach umzusetzen bzw. ich wollte es anders lösen :D

Es geht darum, dass Du eine Liste2 hast und da für jedes Element das heraus suchen wills. Das Codebeispiel vom TE war ja offensichtlich nur ein kleiner Teilbereich. Also wird es da sowas wie ein:
Java:
private void mergeData(List<MyClass2> list1, List<MyClass2> list2) {
    list2.stream()
        .forEach(elem -> elem.data1 = list.stream()
                 .filter(elem -> id.equals(elem.getId()))
                 .map(myClass::getData1)
                 .findFirst()
                 .orElse(null);
}

Ja genau, das war nur ein Teilbereich. Der zweite Teilbereich ist das iterieren über list2 nach folgendem Schema

Java:
private updateList (List<myClass> list1, List<myClass> list2) {
    short id;
    
    for (int i = 0;i<list2.size();i++) {
        id = list2.get(i).getId();
        if (id != 0) {
            data1 = getData1(id,list1);
            list2.get(i).setData1(data1);
        }
    }
    return list2;
}
(Syntaktische Fehler sind hier nicht ausgeschlossen, da ich das Beispiel nur vereinfacht darstellen möchte und es nicht der "richtige" Code ist) :)

Dein Beispiel sieht eig. schon ganz gut aus und ich denke nach sowas hatte ich auch gesucht. Ich finde es zumindest besser so wie ich es aktuell habe. Ich muss mal schauen wie ich das bei mir dann entsprechen abbilden kann.

Ich hatte mich halt grundsätzlich gefragt ob für solche Angelegenheiten Streams auch verwerndet werden sollten.. Bisher hatte ich halt Streams nur hauptsächlich dafür verwendet Listen nach bestimmten Kriterien zu filtern.
 
F

fireGlurak

Mitglied
Hallo nochmal,

ich habe versucht dies auf ein vereinfachtes Beispiel anzuwenden, aber ich kriege die Funktion mergeData() noch nicht ganz zum laufen, könnte sich dies jmd. mal anschauen. Ich habe da noch einen Syntax Error in der Funktion (insert ")" to complete Expressions). Wenn ich das entsprechend anpasse, dann wird in der Filter-Funktion gemeckert

Cannot invoke filter((<no type> elem) -> {}) on the primitive type void

Klasse Test:
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        List<Data> list1 = new ArrayList<>();
        List<Data> list2 = new ArrayList<>();

        list1.add(new Data((short) 5, "a", "b", "c"));
        list1.add(new Data((short) 9, "d", "e", "f"));
        list1.add(new Data((short) 3, "g", "h", "i"));

        list2.add(new Data((short) 9, null, null, null));
        list2.add(new Data((short) 5, null, null, null));

    }

    private void mergeData(List<Data> list1, List<Data> list2) {
        list2.stream()
            .forEach(elem -> elem.data1 = list1.stream())
                     .filter(elem -> id.equals(elem.getId())
                     .map(Data::getData1)
                     .findFirst()
                     .orElse(null);
    }

}

Klasse Data:
public class Data {

    private short id = 0;
    private String data1;
    private String data2;
    private String data3;

    public Data(short id, String data1, String data2, String data3) {
        super();
        this.id = id;
        this.data1 = data1;
        this.data2 = data2;
        this.data3 = data3;
    }

    public short getId() {
        return id;
    }

    public void setId(short id) {
        this.id = id;
    }

    public String getData1() {
        return data1;
    }

    public void setData1(String data1) {
        this.data1 = data1;
    }

    public String getData2() {
        return data2;
    }

    public void setData2(String data2) {
        this.data2 = data2;
    }

    public String getData3() {
        return data3;
    }

    public void setData3(String data3) {
        this.data3 = data3;
    }

}

Ich muss gestehen, dass ich auch noch ein wenig Probleme habe beim versuch mir das sprachlich zu übersetzen. Würde das in etwa so passen ?
->Iteriere über list2
-> iteriere bei jedem obj aus list2 über list1
->filter liste1 anhand der ID (.filter())
->füge data1 aus list1 in list2 ein (.map())
-> ??? (.findFirst()) <- Verstehe ich nicht wieso das hier verwendet werden müsste. Zum einen sollte list1 nach .filter() nur über ein Objekt verfügen (da die ID nur einmal vorhanden sein darf) und zum anderen müsste dies doch vor dem mapping gecallt werden, oder habe ich da einen Denkfehler ?
-> Sollte es die ID in list1 nicht geben, gib null zurück
 
T

thecain

Top Contributor
Deine Klammerung ist auch willkürlich. Die Klammer vom filter schliesst du ja z.B gar nicht. Dafür die vom forEach, was terminierend ist, direkt. Das kann nicht klappen.
 
kneitzel

kneitzel

Top Contributor
Erster Hinweis: nimm Komplexität raus, in dem Dinge in Methoden auslagerst!

Dann hast du auch weniger komplizierte Ausdrücke.

Ausdrücke, die Du nicht verstehst, sind somit Schrott und für Dich nicht lesbar. Also als Übung ja, aber sollte es um irgend ein echtes Projekt gehen: lass Streams erst mal weg!

Also was willst du machen?

Java:
list2.stream()
            .forEach(elem -> elem.data1 = something());

Damit hast du den prinzipiellen Funktionsaufruf. Brauchst du ein brauchbaren Namen und dann Parameter ... da kannst du dann die Methoden ansehen, die hier im Thread schon gehandhabt wurden.

Die Methode würde ich aber immer beibehalten um es übersichtlich zu machen.

Was direkt auffällt: nach eine. stream() ist eine weitere ) eigentlich immer falsch. (Streams werden in der Regel nicht zurück gegeben... Damit wird in der Regel etwas gemacht.)

Ein weiterer Hinweis wäre dann noch bezüglich stream().foreach(...) als Konstrukt ohne jedes Beiwerk: da ist in der Regel immer schlecht, da statt dessen direkt eine foreach Schleife genommen werden kann.

Leseempfehlung: Effective Java von Joshua Bloch, Thema 45: Setzen Sie Streams mit Bedacht ein.
Da ist sowohl das mit den Methoden als auch mit foreach erwähnt (so ich mich jetzt nicht irre) - das Buch kann ich aber guten Gewissens empfehlen für Leute, die Java halbwegs können und etwas besseren Code schreiben wollen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Monokuma Lesbarkeit von Streams Allgemeine Java-Themen 6
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
J Streams Allgemeine Java-Themen 6
L Streams und Exception Allgemeine Java-Themen 8
L Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
kneitzel Lesbarkeit von Streams Allgemeine Java-Themen 5
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
mihe7 Lesbarkeit von Streams Allgemeine Java-Themen 5
N Streams wann .filtern? Allgemeine Java-Themen 2
A Lambda und Streams verstehen Allgemeine Java-Themen 4
J IO Streams Allgemeine Java-Themen 13
M Wie funktionieren parallele Java Streams? Allgemeine Java-Themen 1
R Collections BiPredicate in Java 8 Streams Allgemeine Java-Themen 7
F Umgehen mit übergebenen Streams Allgemeine Java-Themen 3
hdi Überwachen des err-Streams? Allgemeine Java-Themen 8
N read streams umleiten Allgemeine Java-Themen 2
DEvent GZIP Streams und gzip Allgemeine Java-Themen 2
S Streams zusammenfügen Allgemeine Java-Themen 4
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
C in Streams Allgemeine Java-Themen 4
M Sind Streams asynchron? Allgemeine Java-Themen 2
Saxony DOS Konsole und deren Streams Allgemeine Java-Themen 5
B Probleme mit Streams Allgemeine Java-Themen 5
T Zwei Streams verbinden Allgemeine Java-Themen 3
L Die Wahl des richtigen Streams? Allgemeine Java-Themen 3
G Video Streams mit Servlets Allgemeine Java-Themen 3
P Streams per Mail mit JavaMailAPI versenden Allgemeine Java-Themen 3
A Streams: merkwürdiges Verhalten Allgemeine Java-Themen 7
A Streams - merkwürdiges Verhalten Allgemeine Java-Themen 2
thE_29 Problem mit Streams Allgemeine Java-Themen 6
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
W Alternative für Threads Allgemeine Java-Themen 6
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
M DAOs veraltet - was ist die Alternative? Allgemeine Java-Themen 13
M Array umbau oder Alternative? Allgemeine Java-Themen 5
C Alternative zu NetworkX in Java Allgemeine Java-Themen 1
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
B Alternative zu nebenläufigen Prozessen Allgemeine Java-Themen 4
BonoBoo Alternative zum endlosen Instanzieren Allgemeine Java-Themen 2
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
E Gewollte Endlosschleife unterbrechen oder Alternative gesucht Allgemeine Java-Themen 2
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
F alternative zu "JPEGImageDecoderImpl" Allgemeine Java-Themen 2
T Timer oder Alternative? Allgemeine Java-Themen 3
G Alternative zu .properties Dateien Allgemeine Java-Themen 20
S Alternative zu SortedMap? Allgemeine Java-Themen 8
H Alternative zu Stack Allgemeine Java-Themen 3
pikay Jar2Exe Alternative? Allgemeine Java-Themen 17
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
H Alternative if Schreibweise mit ? Allgemeine Java-Themen 10
G suche Property alternative Allgemeine Java-Themen 4
H Wie schön oder unschön ist dieser code - alternative ? Allgemeine Java-Themen 5
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
G libext Alternative? Allgemeine Java-Themen 5
S Alternative zu Robot (wegen Umlauten) Allgemeine Java-Themen 13
foobar Alternative zu JavaHelp gesucht Allgemeine Java-Themen 2
I Alternative zu getClass().getResourceAsStream() ? Allgemeine Java-Themen 9
D System.setProperty alternative Allgemeine Java-Themen 4
J alternative zu rsh ? Allgemeine Java-Themen 5
K KeyListener-Alternative ohne anfängliches Delay ? Allgemeine Java-Themen 5
G Alternative zu split() Allgemeine Java-Themen 3
K Alternative zu JNI Allgemeine Java-Themen 3
P Alternative zu replaceAll (jdk < 1.4) Allgemeine Java-Themen 14
M Alternative zu Thread : stop() ? Allgemeine Java-Themen 10
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
NicoDeluxe Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
J Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
F PI Regler für Heizung Allgemeine Java-Themen 7
bueges Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11
N fixed-keyword von C# für Java Allgemeine Java-Themen 6
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
Kirby.exe Software für Graphische Visualisierung Allgemeine Java-Themen 20

Ähnliche Java Themen


Oben