OK, I found a solution (obviously not the best one...): lucene.Set is
representing a java.util *interface* Set<E> which of course cannot be
instantiated. HashSet is an implementing class, and can be instantiated. You
can add elements via the add() method to the set then. Example:
def get_lucene_set(python_list):
"""convert python list into lucene.Set (Java.util.set interface)
using the HashSet class (java.util) wrapped in lucene.HashSet
"""
hs = lucene.HashSet()
for el in python_list:
hs.add(el)
return hs
However I'm still looking for a more elegant constructor that would allow to
create a HashSet from a python set (or list). Is that available/possible?
The same holds for lists like the ArrayList (from java.util too) which
implements the Collection interface:
Example:
>>> l =range(3)
>>> l
[0, 1, 2]
>>> a = lucene.ArrayList(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
lucene.InvalidArgsError: (<type 'ArrayList'>, '__init__', ([0, 1, 2],))
using the for-in-do obj.add "trick" allows to generate a 'filled' instance
here as well : <ArrayList: [0, 1, 2]>
but wouldn't it be nice to be able to create an instance more "pythonic"?
I'm not a Java expert (nor do I know much about the Collections API), so
maybe it's even impossible in Java to create an instance of a
List,Vector,HashSet (whatever) and passing some literals (like Strings) -
who knows... So if anyone has a better idea how to do this in PyLucene
please let me know ,-)
regards,
Thomas