Wie schon anderswo geschrienen, will ich zur Java 8-Einführung in der Firma (yeah!) ein Quiz für meine Kollegen machen und hier “testlaufen” lassen. Es sollen um die 20 Fragen aus dem Bereich Lambdas, Streams, Methoden-Referenzen und Default-Methoden gehen. Bitte dran denken, dass es um Java 8 und nicht 9 geht (da frage ich in fünf Jahren mal nach). Um Verbesserungsvorschläge wird gebeten. Ich fang mal einfach an:
A - the definition of the interface ‘Named’ is valid
B - ‘Named’ is a functional interface (a.k.a. SAM type)
C - it can be instantiated by: Named named = () -> "Willy";
D - all of above
E - none of above
Ich glaube, dass ich doch auf Multiple Choice umschwenken sollte, das gibt mir einfach mehr Möglichkeiten pro Frage.
Dafür spricht auch, dass es am Ende einen Preis gibt (aber eben nur einen). Deshalb muss ich auch entsprechend „trennscharf“ sein, damit es möglichst einen eindeutigen Sieger gibt - ein paar obskure Fragen für ein Stechen kann ich ja trotzdem vorbereiten.
Egal wie du dich schlussendlich entscheidest, ein kurzes Intro, wie geantwortet werden muss, darf keinesfalls fehlen.
Die Multiple-Choice-Variante ist etwas schwieriger, weil es mehr Freiheitsgrade gibt. Bei der Frage 1 wäre so nämlich bspw. auch B + C möglich. Oder anders ausgedrückt: statt 5 gäbe es dann 8 Antwortmöglichkeiten. Ob es dann zu schwierig wird, musst du bewerten.
Na ja, ich werde auch sehr leichte Fragen stellen. Es sollen auch die angesprochen werden, an denen das Thema bisher vorbeigegangen ist. Aber ich brauche eben auch einen klaren Gewinner, deshalb müssen auch schwierigere Fragen dabei sein. (Kurzes) Googlen und Raten soll deshalb auch möglichst wenig bringen.
Ich ändere die restlichen Fragen erst mal auf Multiple Choice.
Ja, das ist ein gewisses Risiko. Ich würde zwar nochmal die Namen und Typen ändern, aber ich weiß nicht, ob das als Schutz ausreicht. Oder ihr postet möglichst viele falsche Antworten
Man könnte den Thread auch verstecken, solange das Quiz läuft, aber natürlich kann Googles Caching trotzdem einen Strich durch die Rechnung machen
Q2
interface BiFunction<X, Y, R> {
R apply(X x, Y y);
}
Given the interface ‚BiFunction‘, which of the following definitions will work?
A - BiFunction<Long, Long, Long> f = (x,y) -> x + y;
B - BiFunction<Long, Long, Long> f = (x,y) -> (x + y);
C - BiFunction<Long, Long, Long> f = (x,y) -> {x + y};
D - BiFunction<Long, Long, Long> f = (x,y) -> {return x + y;};
Antwortversuch für Q2, Nicht gegoogelt, Nicht getestet:
A, C und D.
Edit: Nummerierung Q2 hinzugefügt, Antwort nicht verändert, den Pandabären entfernt, da Offtopic; gut dass jetzt mein Antwortversuch und cmrudolph voneinander divergieren, dh es ist schwieriger geworden.
Nur am Rande: Wie sieht denn dann die “Auflösung” aus? Also, ich denke, die Antworten einfach aufzulisten, ohne ausführliche Begründung, würde nicht viel Sinn machen. Da stellt sich auch die Frage, wo/wie das Quiz insgesamt (zeitlich) ablaufen soll.
Also ich will das Quiz vorher online machen lassen, und die Auflösung gibt es in dem Meeting, in dem sonst immer die langweiligen Vorträge gehalten werden. Natürlich mit ordentlicher Begründung.
A - will lead to a StackOverflowError
B - will not compile
C - will run until memory is exhausted
D - will produce an array containing the values 1, 2, 3, 4 and 5
@Marco13 Ja, mir ging es um das flatMap. Ist für mich unverständlich, dass das nicht auch lazy ausgewertet wird. Technisch spricht eigentlich nichts dagegen, oder?
Einen einfachen, plausiblen Grund kann ich nicht nennen. Kurzes browsen führt schnell in die Implementierungsdetails von Sinks & Co, die ich noch nicht sooo weit analysiert habe. Ein subtil-händeweldelnd-rechtfertigender Hinweis könnte in den JavaDocs von flatMap stecken:
Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream…
H.v.m
Das könnte (und sollte man in diesem Fall wohl auch) so verstehen, dass das flatMap eben nicht eine „Konkatenation“ der Streams liefert, die durch die Funktion entstehen (also nicht „DEN“ Stream, der in diesem Fall für i=1 erstellt wird), sondern einen neuen Stream, der den gesamten Inhalt der durch das mappen entstehenden Streams enthält. Und der Inhalt ist hier unendlich groß.