ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brandon Goodin <brandon.goo...@gmail.com>
Subject Re: Can I use Set instead of List?
Date Tue, 07 Apr 2009 13:59:13 GMT
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 <brandon.goodin@gmail.com>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 <
> iloetzsch@asci-systemhaus.de> 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 <ferknjige@gmail.com
>> > <mailto:ferknjige@gmail.com>> 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 <larry.meadors@gmail.com
>> >     <mailto:larry.meadors@gmail.com>>
>> >
>> >         return new LinkedHashSet(queryForList(...));
>> >
>> >         Larry
>> >
>> >
>> >         On Sun, Apr 5, 2009 at 10:53 PM, fer knjige <
>> ferknjige@gmail.com
>> >         <mailto:ferknjige@gmail.com>> 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!
>>
>>
>

Mime
View raw message