Working with immutable collections
Gernot Neppert
mcnepp02 at googlemail.com
Mon Nov 19 07:07:06 PST 2012
I'd rather have an "unmodifiable" member function in
java.util.Collection, together with a "synchronized" function, something
like this:
public interface Collection<E> {
/**
Returns an unmodifiable view of this Collection.
@return an unmodifiable view of this Collection (may be {@code this}
instance if is already unmodifiable).
public Collection<E> unmodifiable() default {
return Collections.unmodifiableCollection(this);
}
/**
Returns a synchronized view of this Collection.
@param lock the Lock to use.
@return a view of this Collection that executes all operations while
holding a Lock. (may be {@code this} instance if is already synchronized
on the supplied Lock).
@throws IllegalArgumentException if this Collection is already
synchronized on a different Lock.
public Collection<E> synchronize(Lock lock) default {
return Collections.synchronize(this, lock);
}
}
These should of course be co-variantly overriden in java.util.List,
java.util.Set etc.!
Am 19.11.2012 15:39, schrieb Johan Haleby:
> Hi,
>
> I'm sorry if this has been discussed before but here goes:
>
> Let's say I have an immutable list called "xList" that I want to filter and
> return the result as a new *immutable* list. I could do something like this:
>
> Collections.unmodifiableList(xList.filter(obj -> obj.something()).into(new
> ArrayList<X>())));
>
> How ever I think this is quite verbose and doesn't follow the fluent style
> of the API. What I would like to have is something a long these lines:
>
> xList.filter(obj -> obj.something()).intoImmutable(new ArrayList<X>()));
>
> "intoImmutable" could then do "Collections.unmodifiableList(..)" for me so
> I don't need to wrap all statements where I want to return an immutable
> collection.
>
> What are your thoughts on this?
>
> Regards,
> /Johan
>
More information about the lambda-dev
mailing list