[ 
https://issues.apache.org/jira/browse/COLLECTIONS-550?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14291253#comment-14291253
 ] 

Gonçalo Marques edited comment on COLLECTIONS-550 at 1/25/15 8:28 PM:
----------------------------------------------------------------------

Hello,

The pull request has just been updated taking your comments into consideration.

Changes:

* A new {{IterableUtils}} class was created and the feature was moved into it
* Methods were renamed to {{toString()}}
* A {{toString(Iterable)}} method was created where we call each element's 
{{toString()}}, use a default delimiter ({{,}}), default prefix({{\[}}) and 
default suffix ({{\]}})
* The method was overloaded with another one that also receives a 
{{Transformer}}, which will be used to fetch each element's {{String}} 
representation. Default delimiter, prefix and suffix were also used here
* There is another overload where client code may additionally specify a 
delimiter, prefix and suffix, along with the {{Transformer}}.

The unit tests that support the feature became kind of extensive, covering a 
wide number of combinations in all three methods ({{IterableUtilsTest}}). I 
think we should keep it this way in order to guarantee correctness, even if we 
change just a single method in the future (overloaded or not).

About moving the already existing methods that work with {{Iterable}} into the 
new {{IterableUtils}}, I think that it makes sense. There are already distinct 
and specific {{*Utils}} classes for each separate case, and an {{Iterable}} is 
definitely not a {{Collection}}. This refactor looks more suitable for a 
dedicated JIRA. It will be disruptive in what matters to client code and it 
will need a deprecation process.

Let me know your thoughts or if you have any other question/doubt/improvement 
regarding this issue!

Cheers,
GM



was (Author: gonmarques):
Hello,

The pull request has just been updated taking your comments into consideration.

Changes:

* A new {{IterableUtils}} class was created and the feature was moved into it
* Methods were renamed to {{toString()}}
* A {{toString(Iterable)}} method was created where we call each element's 
{{toString()}}, use a default delimiter ({{,}}), default prefix({{\[}}) and 
default suffix ({{\]}})
* The method was overloaded with another one that also receives a 
{{Transformer}}. Default delimiter, prefix and suffix were also used here
* There is another overload where client code may specify a specific delimiter, 
prefix and suffix.

The unit tests that support the feature became kind of extensive, covering a 
wide number of combinations in all three methods. I think we should keep it 
this way in order to guarantee correctness, even if we change just a single 
method in the future (overloaded or not).

About moving the already existing methods that work with {{Iterable}} into the 
new {{IterableUtils}}, I think that it makes sense. There are already distinct 
and specific {{*Utils}} classes for each separate case, and an {{Iterable}} is 
definitely not a {{Collection}}. This refactor looks more suitable for a 
dedicated JIRA. It will be disruptive in what matters to client code and it 
will need a deprecation process.

Let me know your thoughts or if you have any other question/doubt/improvement 
regarding this issue!

Cheers,
GM


> Provide a simple way for creating an arbitrary String representation of a 
> given Iterable
> ----------------------------------------------------------------------------------------
>
>                 Key: COLLECTIONS-550
>                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-550
>             Project: Commons Collections
>          Issue Type: New Feature
>          Components: Collection
>    Affects Versions: 4.0
>            Reporter: Gonçalo Marques
>            Priority: Minor
>              Labels: collection, util
>
> Create an utility method that returns an arbitrary {{String}} representation 
> of a given {{Iterable}}, where for each {{Iterable}} element one may require 
> a {{String}} representation that is different from the element's own 
> {{toString()}} result.
> Additionally the client may also provide an optional delimiter, where the 
> default one could be the common {{", "}}.
> The transformation of each {{Iterable}} element into an arbitrary {{String}} 
> could be implemented by the means of a {{Transformer}}.
> Example (illustrative method in {{CollectionUtils}}):
> {code}
> static <C> String toString(Iterable<C> iterable, Transformer<C, String> 
> transformer);
> {code}
> Consider the following illustrative class:
> {code}
> class SomeClass {
>   private final String propertyOne;
>   private final String propertyTwo;
>   public SomeClass(String propertyOne, String propertyTwo) {
>     this.propertyOne = propertyOne;
>     this.propertyTwo = propertyTwo;
>   }
>   public String getPropertyOne() {
>     return propertyOne;
>   }
>   public String getPropertyTwo() {
>     return propertyTwo;
>   }
>   @Override
>   public String toString() {
>     return propertyOne;
>   }
> }
> {code}
> One could transform an {{Iterable}} containing elements of type {{SomeClass}} 
> into a client provided {{String}} representation by calling:
> {code}
> // list contains elements of type SomeClass
> String result = CollectionUtils.toString(list, new Transformer<SomeClass, 
> String>() {
>   @Override
>   public String transform(SomeClass someClass) {
>     return someClass.getPropertyTwo();
>   }
> });
> // Will print "propertyTwoA, propertyTwoB"
> System.out.println(result);
> result = CollectionUtils.toString(list, new Transformer<SomeClass, String>() {
>   @Override
>   public String transform(SomeClass someClass) {
>     return someClass.getPropertyOne() + someClass.getPropertyTwo();
>   }
> });
> // Will print propertyOneApropertyTwoA, propertyOneBpropertyTwoB
> System.out.println(result);
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to