commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Tompkins <chtom...@gmail.com>
Subject Re: StringUtils.isEmpty() family of methods on Objects
Date Mon, 30 Jan 2017 02:45:44 GMT


> On Jan 29, 2017, at 9:24 PM, Gary Gregory <garydgregory@gmail.com> wrote:
> 
> I know someone would reply with some Java 8 lamba... but that will never be
> as easy to ready as a method name like isEmpty or hasSomething...
> 

At my day job a bunch of folks got giddy over the new java 8 functionality and ended up writing
a ton of unreadable non-debugable code. So, I definitely agree with this sentiment.  

-Rob


> Gary
> 
>> On Sat, Jan 28, 2017 at 2:33 PM, Matt Benson <gudnabrsam@gmail.com> wrote:
>> 
>> Like Bene, this feels a little off to me. Just for argument's sake, let's
>> look at:
>> 
>> Optional.ofNullable(foo).map(Object::toString).filter(
>> StringUtils::isNotBlank).isPresent();
>> 
>> Assuming you're on Java 8, of course. It's a bit long, but not horrible.
>> What about, in a Java 8-compatible version of [lang], an
>> Optionals/OptionalUtils class?
>> 
>> public class OptionalUtils {
>> 
>>  public static Optional<String> toString(Object o) {
>>    return map(o, Object::toString);
>>  }
>> 
>>  static <T, R> Optional<R> map(T t, Function<? super T, ? extends
R> fn) {
>>    return Optional.ofNullable(t).map(fn);
>>  }
>> }
>> 
>> Then your test could be shortened to:
>> 
>> OptionalUtils.toString(foo).filter(StringUtils::isNotBlank).isPresent();
>> 
>> Just thinking "out loud",
>> Matt
>> 
>> On Sat, Jan 28, 2017 at 11:08 AM, Gary Gregory <garydgregory@gmail.com>
>> wrote:
>> 
>>> If you look at the link Matt provided, that handles arrays and
>> collection,
>>> but not Object.toString()
>>> 
>>> Gary
>>> 
>>> On Jan 28, 2017 1:13 AM, "Benedikt Ritter" <britter@apache.org> wrote:
>>> 
>>> 
>>>> Am 28.01.2017 um 02:53 schrieb Gary Gregory <garydgregory@gmail.com>:
>>>> 
>>>> The simplest examples I have on hand are instances of Path and URI
>> which
>>>> can be built with an empty string. I want to know if these are "empty".
>>> For
>>>> the app I am now on for example, a Path or null and "" should be
>> treated
>>>> the same. Same for a URI.
>>> 
>>> I don’t think it is a good idea to define emptiness based on the return
>>> value of Object.toString(). Consider the following:
>>> 
>>> isEmpty(null) -> true
>>> isEmpty(„“) -> true
>>> isEmpty(new URI(„“)) -> true
>>> 
>>> But:
>>> 
>>> isEmpty(Collections.emptyList()) -> false
>>> isEmpty(new int[0]) -> false
>>> 
>>> This is because toString() has nothing to do with emptiness. For this
>>> reason I think it would be better to have explicitly typed method
>> overloads
>>> for the use cases you’re thinking about:
>>> 
>>> boolean isEmpty(Path)
>>> boolean isEmpty(URI)
>>> 
>>> I’m not sure whether this belong to [lang]. The first looks like it
>> belongs
>>> to [io] while the second would better fit into [net]…
>>> 
>>> Benedikt
>>> 
>>>> 
>>>> Gary
>>>> 
>>>>> On Fri, Jan 27, 2017 at 5:37 PM, Matt Sicker <boards@gmail.com>
wrote:
>>>>> 
>>>>> That's an interesting use case, though I've never come across a
>>> toString()
>>>>> implementation that would be affected. Can you go into more detail?
>>>>> 
>>>>> On 27 January 2017 at 16:04, Gary Gregory <garydgregory@gmail.com>
>>> wrote:
>>>>> 
>>>>>> _Like_ that except that our Log4j version does not do the case I
>> want:
>>>>>> object.toString().
>>>>>> 
>>>>>> Gary
>>>>>> 
>>>>>> On Fri, Jan 27, 2017 at 1:58 PM, Matt Sicker <boards@gmail.com>
>> wrote:
>>>>>> 
>>>>>>> Something like this?
>>>>>>> 
>>>>>>> https://github.com/apache/logging-log4j2/blob/master/
>>>>>>> log4j-core/src/main/java/org/apache/logging/log4j/core/
>>>>>>> util/Assert.java#L43
>>>>>>> 
>>>>>>> On 27 January 2017 at 15:54, Gary Gregory <garydgregory@gmail.com>
>>>>>> wrote:
>>>>>>> 
>>>>>>>> Hi All,
>>>>>>>> 
>>>>>>>> There are certain kinds of objects, _descriptor_ kind of
objects
>> that
>>>>>>> would
>>>>>>>> benefit from isEmpty semantics. These kind of objects can
describe
>>>>>>> complex
>>>>>>>> command line arguments and other kind of configuration objects.
>>>>>>>> 
>>>>>>>> I'd like to add with this pseudo code:
>>>>>>>> 
>>>>>>>> boolean isEmpty(Object) {
>>>>>>>> return object == null ? true : isEmpty(object.toString());
>>>>>>>> }
>>>>>>>> 
>>>>>>>> Thoughts?
>>>>>>>> 
>>>>>>>> Same idea of isBlank(), isNotEmpty() and so on.
>>>>>>>> 
>>>>>>>> Gary
>>>>>>>> 
>>>>>>>> --
>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_
>>>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&
>>>>>>>> linkCode=as2&tag=garygregory-20&linkId=
>>>>> cadb800f39946ec62ea2b1af9fe6a2
>>>>>> b8>
>>>>>>>> 
>>>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
>>>>> garygregory-20&l=am2&o=1&a=
>>>>>>>> 1617290459>
>>>>>>>> JUnit in Action, Second Edition
>>>>>>>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_
>>>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&
>>>>>>>> linkCode=as2&tag=garygregory-20&linkId=
>>>>> 31ecd1f6b6d1eaf8886ac902a24de4
>>>>>>> 18%22
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
>>>>> garygregory-20&l=am2&o=1&a=
>>>>>>>> 1935182021>
>>>>>>>> Spring Batch in Action
>>>>>>>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_
>>>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&
>>>>>>>> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%
>>>>>>>> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
>>>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
>>>>> garygregory-20&l=am2&o=1&a=
>>>>>>>> 1935182951>
>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>> Home: http://garygregory.com/
>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Matt Sicker <boards@gmail.com>
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_
>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&
>>>>>> linkCode=as2&tag=garygregory-20&linkId=
>> cadb800f39946ec62ea2b1af9fe6a2
>>> b8>
>>>>>> 
>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
>> garygregory-20&l=am2&o=1&a=
>>>>>> 1617290459>
>>>>>> JUnit in Action, Second Edition
>>>>>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_
>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&
>>>>>> linkCode=as2&tag=garygregory-20&linkId=
>> 31ecd1f6b6d1eaf8886ac902a24de4
>>>>> 18%22
>>>>>>> 
>>>>>> 
>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
>> garygregory-20&l=am2&o=1&a=
>>>>>> 1935182021>
>>>>>> Spring Batch in Action
>>>>>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_
>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&
>>>>>> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%
>>>>>> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
>> garygregory-20&l=am2&o=1&a=
>>>>>> 1935182951>
>>>>>> Blog: http://garygregory.wordpress.com
>>>>>> Home: http://garygregory.com/
>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Matt Sicker <boards@gmail.com>
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>> Java Persistence with Hibernate, Second Edition
>>>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?
>>> ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&link
>>> Code=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
>>>> 
>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=
>>> am2&o=1&a=1617290459>
>>>> JUnit in Action, Second Edition
>>>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?
>>> ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&link
>>> Code=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>
>>>> 
>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=
>>> am2&o=1&a=1935182021>
>>>> Spring Batch in Action
>>>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?
>>> ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&link
>>> Code=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Bli
>>> nk_id%7D%7D%22%3ESpring+Batch+in+Action>
>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=
>>> am2&o=1&a=1935182951>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: dev-help@commons.apache.org
>>> 
>> 
> 
> 
> 
> -- 
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> Java Persistence with Hibernate, Second Edition
> <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
> 
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
> JUnit in Action, Second Edition
> <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>
> 
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
> Spring Batch in Action
> <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message