Re-using this piece of code for different objects
How about creating an AddressCollection class that holds all the logic of determining the "visible" addresses:

public class AddressCollection
{
    private ArrayList&lt;Address&gt; items;

    public AddressCollection()
    {
        items = new ArrayList&lt;Address&gt;();
    }

    public AddressCollection(ArrayList&lt;Address&gt; addresses) {
        items = addresses;
    }

    public void add(Address address) {
        items.add(address);
    }

    public ArrayList&lt;Address&gt; getVisibleAddresses() {
        ArrayList&lt;Address&gt; visibleAddresses = new ArrayList&lt;Address&gt;();

        for (Address addr : items) {
            if (addr.getPrivacy().isShowForNonContacts()) {
                visibleAddresses.add(addr);
            }
        }

        return visibleAddresses;
    }

    public ArrayList&lt;Address&gt; getItems() {
        return items;
    }
}


Each model that needs this functionality is reduced to a little boiler plate code, but at least you aren't repeating the basic domain logic:

public class UserProfile
{
    private AddressCollection addresses;

    public UserProfile() {
        addresses = new AddressCollection();
    }

    public void setAddresses(ArrayList&lt;Address&gt; addresses) {
        this.addresses = new AddressCollection(addresses);
    }

    public ArrayList&lt;Address&gt; getAddresses() {
        return addresses.getItems();
    }

    public ArrayList&lt;Address&gt; getVisibleAddresses() {
        return addresses.getVisibleAddresses();
    }
}

public class SomethingElse
{
    private AddressCollection addresses;

    public UserProfile() {
        addresses = new AddressCollection();
    }

    public void setAddresses(ArrayList&lt;Address&gt; addresses) {
        this.addresses = new AddressCollection(addresses);
    }

    public ArrayList&lt;Address&gt; getAddresses() {
        return addresses.getItems();
    }

    public ArrayList&lt;Address&gt; getVisibleAddresses() {
        return addresses.getVisibleAddresses();
    }
}