Coder Social home page Coder Social logo

java11-predicate's Introduction

Build Status

java11-predicate

The main goal of this project is to show updated Predicate Interface from Java 11.

overview

  • and: returns a composed predicate that represents a short-circuiting logical AND of this predicate and another

    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }    
    
  • negate: returns a predicate that represents the logical negation of this predicate

    default Predicate<T> negate() {
            return (t) -> !test(t);
        }
    
  • or: returns a composed predicate that represents a short-circuiting logical OR of this predicate and another

    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }    
    
  • isEqual: returns a predicate that tests if two arguments are equal according to Objects.equals(Object, Object)

    static <T> Predicate<T> isEqual(Object targetRef) {
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }    
    
  • not: returns a predicate that is the negation of the supplied predicate

    static <T> Predicate<T> not(Predicate<? super T> target) {
        Objects.requireNonNull(target);
        return (Predicate<T>)target.negate();
    }    
    

best practices

Suppose that we want to filter Stream of objects by some field

class X {
    String value;
    
    // constructors, getters...
}
  • naive approach
    List<X> filtered = xes.stream()
            .filter(x -> Objects.equals(x.value, "test"))
            .collect(Collectors.toList());
    
  • better approach
    1. define static method in X
      static Predicate<X> byValue(String value) {
          return x -> nonNull(x) && Objects.equals(x.value, value);
      }    
      
    2. construct pipeline
      List<X> filtered = xes.stream()
              .filter(X.byValue("test1"))
              .collect(Collectors.toList());        
      
    3. easy to compose
      var filtered = xes.stream()
              .filter(X.byValue("test1").or(X.byValue("test2")))
              .collect(Collectors.toList());
      

java11-predicate's People

Contributors

mtumilowicz avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.