RFR: 5015163 "(str) String merge/join that is the inverse of String.split()" into JDK 8

Paul Sandoz paul.sandoz at oracle.com
Tue May 1 11:37:05 UTC 2012


On May 1, 2012, at 12:53 PM, Rémi Forax wrote:

> On 04/30/2012 11:03 AM, Paul Sandoz wrote:
>> On Apr 28, 2012, at 1:01 AM, Rémi Forax wrote:
>> 
>>> Hi Jim,
>>> Yes, I've basically try to submit a patch each time I've written a method join
>>> in one of my application :)
>>> 
>>> The funny think (in fact it's even not funny) is that I think that this methods
>>> should not be in String anymore. In Java 8, we will have defender methods
>>> so you can write join directly on an Iterable. And there is some discussion
>>> to also allow defender methods on arrays too,
>>> so we may can write a method join on Object[] too
>>> (on an interface inherited from Object[] to be precise).
>>> 
>>> I really think that list.join(",") is better than "".join(",", list) and
>>> ["foo", "bar"].join(",") is better than "".join(",", ["foo", "bar"]).
>>> but maybe I'm wrong.
>>> 
>> Good point. Although i don't see the harm with such methods on String that defer, or are required if say defender methods on arrays never come about.
>> 
>> There are also more general cases of interpose and interleave (see Clojure's functions as an example) since join can be implemented using interpose which can be implemented using interleave.
> 
> Implementing interpose with interleave requires to remove the last element,
> which is not so easy in lazy mode. It's easier to implement it directly.
> 

Or the first e.g.:
http://clojuredocs.org/clojure_core/clojure.core/interpose
(defn interpose
  "Returns a lazy seq of the elements of coll separated by sep"
  {:added "1.0"
   :static true}
  [sep coll] (drop 1 (interleave (repeat sep) coll)))


>> Not saying join should be implemented that way (not so optimal for Strings only) but i think such functions are very useful. I am not tracking the lambda library work very closely, have such functions been considered?
> 
> Yes, we discuss about zip/unzip, and what we call BiStream.
> unzip is the other name of interleave.
> 

Would that require the creation of an intermediate object that holds two values?

Paul.


More information about the core-libs-dev mailing list