Refactoring Java 8 code with Java 17 new features - JEP Café #9
Ғылым және технология
How to use the new features from Java 17, especially Records, to improve your Java 8 code. Do you need to make your code easier to understand without losing performance? This JEP Café shows you how to do it.
Submit your katas for more live coding like this one!
Tags: #Java #OpenJDK #Java17 #JDK #JDK17 #Record #Programming #JEPCafe #InsideJava
⎯⎯⎯⎯⎯⎯ Chapters ⎯⎯⎯⎯⎯⎯
0:00 Intro
1:02 Introducing the Haiku Katas
1:58 1st kata: finding all the letters used in a String
3:37 Comparing the performances
3:53 2nd kata: getting the top 3 most used letters
8:26 Solving the tie problem by inverting a map
12:28 Improving the code with Java 17 features: Records
20:30 Comparing the performances
21:16 3rd kata: partionning the words
22:54 Partionning the words in one pass
23:57 Comparing the performances
24:32 Outro
⎯⎯⎯⎯⎯⎯ Resources ⎯⎯⎯⎯⎯⎯
◦ Donald Raab Haiku Katas ➱ / haiku-for-java-using-t...
◦ JEP 395: Records ➱ openjdk.java.net/jeps/395
◦ The Eclipse Collections framework ➱ www.eclipse.org/collections/
◦ How to use JMH ➱ openjdk.java.net/projects/cod...
◦ JDK 17 ➱ openjdk.java.net/projects/jdk17
◦ Dev.java, The Destination for Java Developers ➱ dev.java/
◦ OpenJDK ➱ openjdk.java.net/
◦ Oracle Java ➱ www.oracle.com/java/
Пікірлер: 69
I like these videos sooo much. They are infinitely nice to watch. Thank you!
@java
2 жыл бұрын
Glad you like them!
Thank you for these recent series of videos on Java 17 features. I've shared them with my team to help us get up to speed on newer features.
@JosePaumard
2 жыл бұрын
Thank you! Glad you like it!
Thanks for posting. Great explanation and breakdown!
@java
2 жыл бұрын
Glad you enjoyed it!
At 3:15, both the Kata and the JDK 17 solution have a common bug. the filtering will eliminate supplementary characters which may be alphabetic. The use of chars() method is the culprit, using codePoints() would be more correct. The surrogate range 0xd800 0xdfff, will always result in isAlphabetic returning false and will eliminate all the supplementary characters even if they are alphabetic.
@n_lisper
10 ай бұрын
Thanks for the info, didn’t know about this!
@thoaikieu5707
7 ай бұрын
hello ! can you give me example supplementary characters which may be alphabetic.
You are Magician of Java Streams 😄
Very useful video, thanks for publishing!
@JosePaumard
2 жыл бұрын
Thank you!
@VisruthCV
2 жыл бұрын
@@JosePaumard Welcome
Thanks for the videos. It will surely help me.
Sir, I am a big fan (as student) of you since couple of years . Thanks a lot.
@java
2 жыл бұрын
So nice of you!
Finally, java tutorials ❤
Thank you so mush Mr. Paumard great presentation
@java
2 жыл бұрын
You are very welcome
really good videos.. thanks.
Awesome sir.
Great 👍 thanks Jose))) best lessons!!
@java
2 жыл бұрын
Glad you liked it!
Thanks !
Jose, We need such videos more frequently !
@java
2 жыл бұрын
We agree! Please stay tuned and hit the 🔔 to get notified. 😉
Nice, Records can improve the readability a lot. It was little too fast for me as it takes some time to read the code and understand.
Thanks, Java is cool
Do you have any video showing how you did to get data benchmark data?
I would avoid sorting entry streams, instead I would rather try to use a TreeMap with an appropriate comparator instead. If you need a sorted map, why not use one? Yes, it is more finicky to construct one using collectors etc., but you eliminate a whole step.
Good Job again
music gets real good at 19mins :)
This would look so much nice in Java Xtend. Sadly though that language never really had a breakthrough.
Holy cow that is a lot of code... Starting to use Go, and now i remember why :D
@MakeItStik
2 жыл бұрын
Can you paste some Go code here for the 2nd problem - top occurrences (including case of tie as described) ? Will help in comparing. - you can mention a github link.
There is an issue with the ide. it is not in dark mode.
What does the us in us/op stand for?
@JosePaumard
2 жыл бұрын
It's the symbol for micro seconds / operation. Usually ou write it "μs", but in many case the "mu" (greek letter) will not display correctly.
There is a much simpler solution. 1. Group by letter to get counts Map, sort it by count 2. Get count of the third element in the list, store it into "int boundaryCount" 3. filter(), or even better takeWhile(), with a count >= boundaryCount. It should be no more than 5 lines of code.
Where can I get such a beautiful mug?
mmmhmm cold coffee 😛
Snake case in class method names? Mmmm maybe too much pressure from rust lang? Je je je
Nice. Now pour me a drink, please.
@java
2 жыл бұрын
Deal
Java is still around? JavKidding
Seems like someone in eclipse collections project is working hard to solve a non-existing problem.
Is this person from France 🇫🇷?
@JosePaumard
2 жыл бұрын
I am.
@houssamel1657
2 жыл бұрын
@@JosePaumard Yeah, I inferred that from how you pronounce letters, thanks for this wonderful video.
@JosePaumard
2 жыл бұрын
@@houssamel1657 Thank you, glad you like it!
@Anshulkatta
Жыл бұрын
Netherlands or Denmark most probably
@francoisloriot2674
3 ай бұрын
@@Anshulkattanot at all. this is a french accent for sure 😊
jdk17 code is more complex than jdk8 code in my opinion
Record would kill lombok
Still mind-boggingly verbose and clunky for something that should be simple. And that's for code written by a very experienced, very smart expert, doing everything that can reasonably be done with the latest tools available to distill it down to near-optimum readability. Good thing we have Kotlin and Clojure now, otherwise I would probably have given up on the JVM...
@brucedsm
2 жыл бұрын
Can you show a example in kotlin? To compare...
@Inuyasha463
2 жыл бұрын
@@brucedsm I can step in here and provide an example. I'm not expert though, so perhaps there are better ways to do it in Kotlin. I haven't watch the whole video yet, so I'm copying the logic he used for the second kata before he started talking about inverting the map. I still need to finish watching that part. The logic should be basically the same as his, so this comparison is mostly so you can compare the readability of Kotlin code with Java code. I personally find it less cluttered and confusing than the Java Streams Apis, but perhaps I'm just more used to Kotlin these days. val result = "This is a test String." .lowercase() .filter { it.isLetter() } .groupingBy { it }.eachCount() .entries.sortedByDescending { it.value } .take(3) The output is: [t=4, s=4, i=3] On a separate note, I love these videos and all the great changes coming to Java. Thanks guys, and keep up the great work!
@ErikBrakkee
Жыл бұрын
Perhaps the video should also have shown a basic method using for loops and collections. My guess is that that code would have been a lot shorter and more easy to understand. There are places for streams IMO but the authors of the streams framework probably did not intend to replace all for loops by streams.
@vanivari359
Жыл бұрын
@@ErikBrakkee yeah, once you start to use it, you tend to use it everywhere, but many java developers really struggle to adopt to them because you have to learn so much stuff - all the collectors and comparators and streams and predicates and static method references and the processing order in the background, i mean: Comparator.reverseOrder() .. who is looking there for that. It forces people into stackoverflow-programming (which is fine if you know what you are doing., but..)
@miasmator
Жыл бұрын
@@vanivari359 You fail to see that Java has already eliminated 90% of the verbosity. Before Java 8, especially before anonymous classes implementing any of this was particularly verbose. Also the fact that you needed to use procedural patterns, any algorithm would have required 100+ lines of code if you didn't want code smells in the form of overly long functions. Having a separate sort method for reverse order might be handy, but these kind of helper methods increase the size of classes and pollute their namespaces.
he seems to be starving for a long time.
Will you please improve your voice quality?
@MrJgremmen
6 ай бұрын
you're not used to writing specifications, are you?
i switched to rust 🙄
@jackofnotrades15
2 жыл бұрын
lol
@user-zq8bt6hv9k
2 жыл бұрын
@@Ihavetoreturnsomevideotapes then switch to javascript
@Asdasxel
2 жыл бұрын
@@user-zq8bt6hv9k Why would you want to end up with a worse language that is used in totally different types of applications?
@user-zq8bt6hv9k
2 жыл бұрын
@@Asdasxel same reason why people switched from c++ to java in the 90's
Or start using Kotlin