You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Chris Shayan (JIRA)" <ji...@apache.org> on 2008/12/02 12:30:44 UTC

[jira] Commented: (COLLECTIONS-306) Use Predicate in subtract

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

Chris Shayan commented on COLLECTIONS-306:
------------------------------------------

package com.chrisshayan;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;

import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * Created by IntelliJ IDEA.
 * User: Chris Shayan and Nasehzade
 * Date: Nov 8, 2008
 * Time: 1:59:36 PM
 */
public class TestSubtract {
    public static class Entity {
        private int number;

        public int getNumber() {
            return number;
        }

        public void setNumber(int number) {
            this.number = number;
        }

        public String toString() {
            return String.valueOf(getNumber());
        }
    }

    /**
     *
     * @param a
     * @param b
     * @param p
     * @return
     */
    public static Collection subtract(final Collection a, final Collection b, Predicate p) {
        ArrayList list = new ArrayList(a);
        for (int i = 0; i < list.size(); i++) {
            Object o = list.get(i);
            if(!p.evaluate(o)) {
                list.remove(i);
            }
        }
        return list;
    }

    public static void main(String[] args) {
//        simple();

        List all = new ArrayList(3);
        Entity entity1 = new TestSubtract.Entity();
        entity1.setNumber(1);
        Entity entity2 = new TestSubtract.Entity();
        entity2.setNumber(2);
        Entity entity3 = new TestSubtract.Entity();
        entity3.setNumber(3);
        all.add(entity1);
        all.add(entity2);
        all.add(entity3);

        final List odd = new ArrayList();
        Entity entity4 = new TestSubtract.Entity();
        entity4.setNumber(1);
        Entity entity5 = new TestSubtract.Entity();
        entity5.setNumber(3);
        odd.add(entity4);
        odd.add(entity5);

        List all2 = new ArrayList(all);
/*
        CollectionUtils.filter(all2, new Predicate() {
            public boolean evaluate(Object o) {
                Entity entity = (Entity) o;
                for (int i = 0; i < odd.size(); i++) {
                    Entity oddEntity = (Entity) odd.get(i);
                    if (entity.getNumber() == oddEntity.getNumber())
                        return false;
                }
                return true;
            }
        });
*/

        Collection c = subtract(all2, odd, new Predicate() {
            public boolean evaluate(Object o) {
                Entity entity = (Entity) o;
                for (int i = 0; i < odd.size(); i++) {
                    Entity oddEntity = (Entity) odd.get(i);
                    if (entity.getNumber() == oddEntity.getNumber())
                        return false;
                }
                return true;
            }
        });        
        List even = new ArrayList(c);
        for (int i = 0; i < even.size(); i++) {
            Object o = even.get(i);
            System.out.println("o = " + o);
        }

    }

    private static void simple() {
        List all = new ArrayList(3);
        all.add(Integer.valueOf("1"));
        all.add(Integer.valueOf("2"));
        all.add(Integer.valueOf("3"));
        List odd = new ArrayList();
        odd.add(Integer.valueOf("1"));
        odd.add(Integer.valueOf("3"));

        Collection evenCollection = CollectionUtils.subtract(all, odd);
        List even = new ArrayList(evenCollection);
        for (int i = 0; i < even.size(); i++) {
            Object o = even.get(i);
            System.out.println("o = " + o);
        }
    }
}


> Use Predicate in subtract
> -------------------------
>
>                 Key: COLLECTIONS-306
>                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-306
>             Project: Commons Collections
>          Issue Type: New Feature
>          Components: Collection
>         Environment: all OSs
>            Reporter: Chris Shayan
>   Original Estimate: 0.75h
>  Remaining Estimate: 0.75h
>
> It is good idea to use Predicate in subtract method, I've developed myself the mentioned method and now I am testing it. I mean we should have following methods:
> The one already exist is:
> public static Collection subtract(Collection a, Collection b)
> I offer to have one more which is:
> public static Collection subtract(Collection a, Collection b, Predicate predicate)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.