JDK-8194272 : Add a static method Predicate.not
  • Type: Enhancement
  • Component: core-libs
  • Sub-Component: java.util.stream
  • Affected Version: 9,10
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2017-12-30
  • Updated: 2018-01-03
  • Resolved: 2018-01-03
Related Reports
Duplicate :  
Description
A DESCRIPTION OF THE REQUEST :
please add java.util.function.Predicate.not( Predicate predicate ), I have found myself writing some variant of the following in every project since Java 8

public interface PredicateUtils {

    static <T> Predicate<T> not( Predicate<T> predicate ) {
        return predicate.negate();
    }
}

JUSTIFICATION :
it is hard to invert method references, here's my tests for the descriptions methods. 

    @Test
    public void testNot() throws Exception {
        assertThat( "predicate", not( ( o ) -> true ), instanceOf( Predicate.class ) );
        assertThat( "negates", PredicateUtils.<Boolean>not( ( o ) -> o ).test( true ), is( false ) );
        assertThat( "method ref", Stream.of( null, null ).filter( not( Objects::nonNull ) ).count(), is( 2L ) );
    }




---------- BEGIN SOURCE ----------
https://bitbucket.org/xenworks/util/src/a6ab361629033e16ffda6b8828fc6ccd41605cad/src/main/java/com/xenoterracide/util/PredicateUtils.java?at=master&fileviewer=file-view-default

package com.xenoterracide.util;

import java.util.function.Predicate;

public interface PredicateUtils {

    static <T> Predicate<T> not( Predicate<T> predicate ) {
        return predicate.negate();
    }
}

package com.xenoterracide.util;

import org.junit.Test;

import java.util.Objects;
import java.util.function.Predicate;
import java.util.stream.Stream;

import static com.xenoterracide.util.PredicateUtils.not;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class PredicateUtilsTest {

    @Test
    public void testNot() throws Exception {
        assertThat( "predicate", not( ( o ) -> true ), instanceOf( Predicate.class ) );
        assertThat( "negates", PredicateUtils.<Boolean>not( ( o ) -> o ).test( true ), is( false ) );
        assertThat( "method ref", Stream.of( null, null ).filter( not( Objects::nonNull ) ).count(), is( 2L ) );
    }
}

---------- END SOURCE ----------