Its more about getting used to and judiciously deciding when to use functional v/s procedural approach. Badly designed APIs can get more complicated when combined with lambdas, but overall what I observe is lambdas and functional style can greatly improve the readability (with many other benefits) if used properly.
A simple word count pipeline like below can get too verbose when expressed without lambdas. Stream<String> stream = … stream .flatMap(s -> Arrays.asList(s.split(" "))) .mapToPair(w -> Pair.of(w, 1)) .countByKey() .filter(x -> x.getSecond() >= 5) .print(); *Without lambda* stream .flatMap(new FlatMapFunction<String, String>() { @Override public Iterable<String> apply(String s) { return Arrays.asList(s.split(" ")); } }) .mapToPair(new PairFunction<String, String, Integer>() { @Override public Pair<String, Integer> apply(String w) { return Pair.of(w, 1); } }) .countByKey() .filter(new Predicate<Pair<String, Long>>() { @Override public boolean test(Pair<String, Long> x) { return x.getSecond() >= 5; } }) .print(); Thanks, Arun On 1/3/17, 10:21 AM, "S G" <sg.online.em...@gmail.com> wrote: >One bad usage I have found is missing types for lambda arguments. >When the types for arguments are not provided in the code itself, github or >vi-editor browsing of such code becomes impossible. > >You must have an IDE like Eclipse to infer the types for such cases and >that becomes a big limitation to browse such code. I have not looked into >the storm code-base to find such occurrences but the above is just a >general observation from the lambda code usages. > > >Secondly, lambdas tend to generate bad stack-traces on exceptions. > > >And lastly, functional programming is not natural to many Java developers. >https://zeroturnaround.com/rebellabs/how-to-avoid-ruining-your-world-with-lambdas-in-java-8/ >hints at some of these problems. Java code is usually very easy to >understand. But once you throw in more than a single level of lambdas, >things tend to become more and more confusing for several developers. (This >last point reflects the thoughts from some of my fellow developers, not >representative of all the devs) > > >Thanks >SG > > >On Mon, Jan 2, 2017 at 8:26 PM, Jungtaek Lim <kabh...@gmail.com> wrote: > >> Hi S G, >> >> I'd be happy if you could elaborate your opinion. Did you found bad usages >> from master branch of Storm code? >> >> Regarding comfortable of lambda, IMHO, I don't think many users are >> unfamiliar with lambda, since they should have been used it with various >> languages. We might not be comfortable with Java 8 lambda (since transition >> to Java 8 is going slowly), but it's just a matter of familiarizing. >> >> Are there kind of best practices for Java 8 lambda? We can refer these to >> construct some guides / restrictions for Storm project. >> >> Thanks, >> Jungtaek Lim (HeartSaVioR) >> >> 2017년 1월 3일 (화) 오후 12:26, S G <sg.online.em...@gmail.com>님이 작성: >> >> > I have found several bad usages of Java 8 lambdas and many developers are >> > not comfortable using them. >> > >> > So we should use them only if it really makes the code beautiful and >> easier >> > to understand. >> > >> > My 2c, >> > Thanks >> > SG >> > >> > >> > On Mon, Dec 26, 2016 at 5:59 AM, Arun Mahadevan <ar...@apache.org> >> wrote: >> > >> > > The streams API implementation has limited usage of 1.8 features and >> can >> > > be easily ported to 1.7 if required. The examples are written in 1.8, >> the >> > > thought being users would stick to the Java 8 style usage (lambdas) >> from >> > > the beginning. If there is consensus we could also consider moving the >> > 1.x >> > > branch to JDK 8. >> > > >> > > Anyways would like interested folks to start reviewing the changes so >> > that >> > > we can take it forward. >> > > >> > > Thanks, >> > > Arun >> > > >> > > >> > > On 12/23/16, 10:09 AM, "Jungtaek Lim" <kabh...@gmail.com> wrote: >> > > >> > > >FYI, I've realized that internal of Stream API (pull request) relies >> on >> > > JDK >> > > >8 (what I've found is 'static method in interface' and maybe more) so >> > for >> > > >now Stream API is expected to be included for at least Storm 2.0.0 >> > unless >> > > >the PR is modified to fit to JDK 7. >> > > > >> > > >- Jungtaek Lim (HeartSaVioR) >> > > > >> > > >2016년 12월 21일 (수) 오전 9:40, Jungtaek Lim <kabh...@gmail.com>님이 작성: >> > > > >> > > >> Thanks Manu and Taylor for giving your opinions. >> > > >> >> > > >> - Storm SQL improvement >> > > >> >> > > >> There're some huge PRs available but there're all about improvement >> > > which >> > > >> shouldn't be blocker for releasing 1.1.0. (I'd like to also include >> > > them to >> > > >> 1.1.0 but not sure it can be happen really soon.) >> > > >> I'll send a request for reviewing about pending Storm SQL PRs. >> > > >> >> > > >> Only one issue (STORM-2200) is linked to release 1.1.0 epic which is >> > > >> blocker for me. >> > > >> >> > > >> - Java port >> > > >> >> > > >> I also had some developers saying 'If core of Storm were written by >> > > Java, >> > > >> I could experiment and even contribute on something'. I was one of >> > them, >> > > >> and to be honest, I'm still a beginner of Clojure. Moving to Java 8 >> > also >> > > >> gives great functionalities for us, so Java port is what I think the >> > > most >> > > >> important thing among the huge works now in progress. Ideally, and >> > > >> hopefully, I'd like to see us focus on this and make this happen at >> > the >> > > >> very early next year. >> > > >> (Yes we should do some manual tests and maybe some refactoring too.) >> > > >> >> > > >> - Metrics V2 >> > > >> >> > > >> I'm not sure when we plan to release Storm 1.2.0, but given that >> > > there're >> > > >> only two things left (logviewer / ui) for completing port work >> (except >> > > >> tests) I guess Storm 2.0.0 might be happen earlier. >> > > >> Taylor, when do you expect metrics V2 will be available for >> reviewing? >> > > >> >> > > >> - Stream API >> > > >> >> > > >> With labeling as experiment or annotating with evolving, we could >> > > include >> > > >> the first version to next minor excluding 1.1.0. (We could even >> > include >> > > >> this to 1.1.0 if we start reviewing this very soon.) >> > > >> >> > > >> I'd like to hear others' opinions as well. >> > > >> >> > > >> Thanks, >> > > >> Jungtaek Lim (HeartSaVioR) >> > > >> >> > > >> 2016년 12월 21일 (수) 오전 7:33, P. Taylor Goetz <ptgo...@gmail.com>님이 >> 작성: >> > > >> >> > > >> Hi Jungtaek, >> > > >> >> > > >> > - Beam runner >> > > >> >> > > >> There’s not been much activity around this, and I haven’t had much >> > time >> > > to >> > > >> work on it recently, but there’s a decent foundation to build upon. >> So >> > > it >> > > >> would be fairly easy for others to start contributing to that >> effort. >> > > >> There’s also interest from the Beam community in that runner, so one >> > > >> possibility is to move that effort to the Apache Beam project. >> > > >> >> > > >> This is very preliminary work, so I don’t have a good handle on what >> > the >> > > >> target release would be. >> > > >> >> > > >> > - Metrics renewal >> > > >> >> > > >> >> > > >> This is what I’ve been referring to as “metrics_v2”. This is >> > progressing >> > > >> fairly well with support for multiple reporters (e.g. Graphite, >> > Ganglia, >> > > >> console, etc.), worker metrics, disruptor metrics, etc. >> > > >> >> > > >> I would like to target this work for 1.2.0. >> > > >> >> > > >> > - Java port >> > > >> >> > > >> This effort seems to have picked up (for example Bobby’s conversion >> of >> > > >> Nimbus, etc.) and is progressing steadily. It’s taken a lot longer >> > than >> > > >> initially thought, but a lot of that can be attributed to the ebb >> and >> > > flow >> > > >> of people’s availability to do the work. >> > > >> >> > > >> > - Storm SQL improvement (Streaming SQL in future) >> > > >> >> > > >> You’ve been spearheading most of the work here, so I’d delegate to >> you >> > > for >> > > >> your opinion on where it stands. If you need additional reviews, >> just >> > > ask >> > > >> on list or via GitHub (e.g. “[REVIEW REQUEST]” in the subject line >> > might >> > > >> help get attention). >> > > >> >> > > >> My thinking has been that this could be included in the 1.1.0 >> release. >> > > Is >> > > >> there a set of JIRA issues you would like to include in order to >> make >> > > that >> > > >> happen? >> > > >> >> > > >> > - Stream API >> > > >> >> > > >> This seems to have stalled a bit, though there seems to be a lot of >> > > >> interest around it. I think we all would agree that when >> introducing a >> > > new >> > > >> API for building topologies, it’s important that we get right from >> the >> > > >> start and have strong buy-in from the development community. I would >> > > >> encourage anyone interested in the Streams API to review the >> proposal >> > > and >> > > >> initial code. >> > > >> >> > > >> I think it is close, but I’m not sure what release to target. >> Possibly >> > > the >> > > >> 2.0 release? >> > > >> >> > > >> Re: 1.1.0 Release >> > > >> >> > > >> STORM-2176 is a fairly big concern of mine since the feature it >> > involves >> > > >> was introduced in 1.0.0 and did not work then nor in any subsequent >> or >> > > >> future releases (may not be a problem in 2.0). Unfortunately, as >> > you’ve >> > > >> seen, finding the root cause is elusive. That issue could definitely >> > use >> > > >> more eyes. >> > > >> >> > > >> -Taylor >> > > >> >> > > >> >> > > >> > On Dec 20, 2016, at 2:19 AM, Jungtaek Lim <kabh...@gmail.com> >> > wrote: >> > > >> > >> > > >> > Hi devs, >> > > >> > >> > > >> > I'm seeing lots of huge works in parallel, and we individual are >> > busy >> > > >> > regarding each work so common works (review, release, >> documentation, >> > > >> etc.) >> > > >> > have been not made in progress for several months. >> > > >> > >> > > >> > - Beam runner >> > > >> > - Metrics renewal >> > > >> > - Java port >> > > >> > - Storm SQL improvement (Streaming SQL in future) >> > > >> > - Stream API >> > > >> > >> > > >> > IMHO, it would be better to set target versions for them, and set >> a >> > > >> roadmap >> > > >> > (per version), and prioritize based on roadmap. >> > > >> > >> > > >> > Stream API (very first version), and Storm SQL improvement are >> > waiting >> > > >> for >> > > >> > review, and personally I would like to publish them soon. >> > > >> > >> > > >> > If we're OK to have 2.0.0 without adding much features, I'm in >> favor >> > > of >> > > >> > concentrating Java port work (postponing other things except >> > releasing >> > > >> 1.x >> > > >> > version line) and moving to Apache Storm 2.0.0 really soon. >> > > >> > (I'm even OK we decide to postpone some clojure files to be >> > addressed >> > > >> after >> > > >> > 2.0.0.) >> > > >> > Actually we're suffering other annoying issue: JDK 7 (1.x) vs 8 >> > (2.x) >> > > >> which >> > > >> > is other reason to move to 2.x quickly. >> > > >> > >> > > >> > I'd be really happy if we have metrics renewal and beam runner, >> but >> > > I'm >> > > >> not >> > > >> > sure when they're available to be published. Do we have any >> updates >> > > here? >> > > >> > >> > > >> > What do you think? It might be ideal, and/or broader discussion >> but >> > we >> > > >> > haven't discussed our plan / vision for a long time so better to >> > give >> > > it >> > > >> a >> > > >> > try. >> > > >> > >> > > >> > Thanks, >> > > >> > Jungtaek Lim (HeartSaVioR) >> > > >> >> > > >> >> > > >> > > >> > > >> > >>