7 ms·
>> ...stream(). map(e -> e.getKey().getPrice().multiply(new BigDecimal(e.getValue()))). reduce(BigDecimal.ZERO, BigDecimal::add) >That's very prett
by callmeal 5y ago
>> ...stream().
map(e -> e.getKey().getPrice().multiply(new BigDecimal(e.getValue()))).
reduce(BigDecimal.ZERO, BigDecimal::add)
>That's very pretty to look at and easy to read. But it's a huge pain in the ass to debug when getPrice starts failing.
The trick with java and chaining calls is that you have to do the chain on each line, so the stack track can pinpoint the line it failed at.
so instead of the above, write the code as:
...stream().
map(e -> e.getKey()
.getPrice()
.multiply(new BigDecimal(e.getValue())))
.reduce(BigDecimal.ZERO, BigDecimal::add)
And the stack trace will tell you if the getKey() or getPrice() failed or the multiply(...) failed.
- mumblemumble 5y agoIf someone would kindly explain this to google-java-format, life would be so much better for everyone involved.
- chii 5y agointellij IDEA does this formatting very easily, and you can also customize it pretty easily to fit your aesthetics too.
- Hackbraten 5y agoPlus: you can put your formatting rules into your `.editorconfig` and put it under source control.
- mumblemumble 5y agoOne downside of this approach is that it only works when you can require everyone who touches the code to use IntelliJ.
- forgetfulness 5y agoFriends don't let friends use Eclipse. But less flippantly, what other tool is workable for Java?
- mumblemumble 5y agoIntelliJ is my favorite Java IDE, too, but I'm not in the business of telling people what editor to use. I can see a company deciding to do that for internal projects. But if it's open source, I'm certainly not interested in creating a situation where it's difficult to comply with a project's coding standards without buying a $500 piece of software.
- chii 5y agothe community edition is free, and usable for most projects that aren't enterprise level.
- Bjartr 5y agoLooks like it shouldn't when the fluent chain wouldn't fit on one line. https://github.com/google/google-java-format/issues/341 https://github.com/google/google-java-format/issues/341
- fouric 5y ago> you have to do the chain on each line, so the stack track can pinpoint the line it failed at ...this, to me, speaks to a huge tooling failure. The stack trace should have precise information about the region of the source file that the call was embedded in (line+column start+end), as opposed to merely the line.