Wrote this too and it worked:
ArrayList list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
HashSet set = new HashSet(list);
System.out.println(set.size());
Brandon
On Tue, Apr 7, 2009 at 8:57 AM, Brandon Goodin <[email protected]>wrote:
> I took a few seconds and wrote this....
>
> ArrayList list = new ArrayList();
> list.add("a");
> list.add("b");
> list.add("c");
> list.add("d");
> list.add("e");
> list.add("f");
>
> HashSet set = new HashSet();
> set.addAll(list);
>
> System.out.println(set.size());
>
> Bon Appetit,
> Brandon
>
>
> On Tue, Apr 7, 2009 at 3:57 AM, Ingmar Lötzsch <
> [email protected]> wrote:
>
>> > This is a fundamental java issue. You will never be able to cast a list
>> > to a set because a list allows duplicates whereas a set dose not.
>>
>> The duplicates are not the reason. ArrayList is not a subtype of Set.
>> And how does the query
>>
>> select * from Products
>>
>> produce duplicates?
>>
>> Lists accept duplicates. Copy the following code in a class and run the
>> main method:
>>
>> package test;
>>
>> import java.util.ArrayList;
>> import java.util.HashSet;
>> import java.util.Set;
>>
>> public class ListSetConversionTest
>> {
>> public static void main(String[] args)
>> {
>> ArrayList<Integer> intList = new ArrayList<Integer>();
>> Integer zero = Integer.valueOf(0);
>> intList.add(zero);
>> intList.add(zero);
>> Set<Integer> intSet = new HashSet<Integer>(intList);
>> System.out.println(intSet);
>> Set<Integer> intSet2 = new HashSet<Integer>();
>> intSet2.addAll(intList);
>> System.out.println(intSet2);
>>
>> String[][] productDataList =
>> {
>> {"1", "Product 1"},
>> {"1", "Product 1"},
>> {"2", "Product 2"},
>> {"2", "Product 2"}
>> };
>>
>> ArrayList<Product> productList = new ArrayList<Product>();
>> for (String[] productData : productDataList)
>> {
>> Product product = new Product();
>> Integer id = Integer.valueOf(productData[0]);
>> product.setId(id);
>> product.setName(productData[1]);
>> productList.add(product);
>> }
>> Set<Product> productSet = new
>> HashSet<Product>(productList);
>> System.out.println(productSet);
>> }
>>
>> protected static class Product
>> {
>> Integer id;
>>
>> String name;
>>
>> public Integer getId()
>> {
>> return this.id;
>> }
>>
>> public void setId(Integer id)
>> {
>> this.id = id;
>> }
>>
>> public String getName()
>> {
>> return this.name;
>> }
>>
>> public void setName(String name)
>> {
>> this.name = name;
>> }
>>
>> @Override
>> public String toString()
>> {
>> return this.id + " " + this.name;
>> }
>> }
>> }
>>
>> You see, that there are (intList, productList) duplicates in both lists.
>> Both intSets don't contain duplicates, but the productSet does.
>>
>> If you want to make the products "unique" in the set, you have to
>> override the equals() and perhaps the hashcode() methods (I' am not an
>> expert for this.)
>>
>> There
>> > is no way for java to know which of the duplicate elements it should
>> > use. If you guarantee that you have unique result from your DB(i.e. use
>> > the unique keyword), then you can programatically create a set from a
>> list.
>> >
>> > off the top of my head....
>> >
>> > List<Product> products =
>> (List<Product>)queryForList("Products.selectAll");
>> > HashSet<Product> productsSet = new HashSet<Product>(products.size());
>> > for(Product p:products) {
>> > productsSet.add(p);
>> > }
>>
>> Of course the best way is to avoid duplicates in the query and use the
>> code from Larry Meadors:
>>
>> return new LinkedHashSet(queryForList(...));
>>
>> LinkedHashSet (instead of HashSet) preserves the order.
>>
>> > On Mon, Apr 6, 2009 at 10:53 PM, fer knjige <[email protected]
>> > <mailto:[email protected]>> wrote:
>> >
>> > Unfortunately this doesn't work. It returns following error:
>> >
>> > Exception in thread "main" java.lang.ClassCastException:
>> > java.util.ArrayList.
>> >
>> > Solution?
>> >
>> > 2009/4/6 Larry Meadors <[email protected]
>> > <mailto:[email protected]>>
>> >
>> > return new LinkedHashSet(queryForList(...));
>> >
>> > Larry
>> >
>> >
>> > On Sun, Apr 5, 2009 at 10:53 PM, fer knjige <
>> [email protected]
>> > <mailto:[email protected]>> wrote:
>> > > Hi,
>> > >
>> > > I have a simple query:
>> > >
>> > > select * from Products.
>> > >
>> > > I want to have results in Set not in List. How can I do it
>> since
>> > > method 'queryForList' returns only List?
>> > >
>> > > Thanks in advance!
>>
>>
>