java:String Arrays列表并删除

Ran*_*ize 10 java junit list

在这样的测试中:

    @Test
    public void test() {
        List<String[]> l = new LinkedList<String[]>();
        l.add(new String [] {"test", "123"});
        l.add(new String [] {"test", "456"});
        l.add(new String [] {"test", "789"});

        assertEquals(3, l.size());

        l.remove(new String [] {"test", "456"});

        assertEquals(2, l.size());
    }
Run Code Online (Sandbox Code Playgroud)

作为第二断言(= 2)不equals/hashcode使用在list.removedefault为对象.有没有办法让列表能够Arrays.equals/Arrays.hashcode用于比较数组?或者唯一的解决方案是将String数组包装在一个对象中并覆盖equals/hashcode

fge*_*fge 6

使用番石榴,有.你需要实现一个Equivalence<String[]>:

public final class MyEquivalence
    extends Equivalence<String[]>
{
    @Override
    protected boolean doEquivalent(final String[] a, final String[] b)
    {
        return Arrays.equals(a, b);
    }

    @Override
    protected int doHash(final String[] t)
    {
        return Arrays.hashCode(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要将您的列表设置为a List<Equivalence.Wrapper<String[]>>,并使用您Equivalence.wrap()方法插入/删除/ etc :

final Equivalence<String[]> eq = new MyEquivalence();
list.add(eq.wrap(oneValue));
list.remove(eq.wrap(anotherValue));
Run Code Online (Sandbox Code Playgroud)

使用番石榴.在我之后重复.使用番石榴:p