View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.functor.example.aggregator.nostore;
19  
20  import org.apache.commons.functor.BinaryFunction;
21  import org.apache.commons.functor.aggregator.AbstractNoStoreAggregator;
22  
23  /**
24   * Shows how to implement own aggregated function to use with
25   * {@link AbstractNoStoreAggregator}.
26   */
27  public class AggregatedFunctionSample {
28      /**
29       * Uses a custom function together with a nostore aggregator to provide a
30       * continuous logical OR in between all the values added to the aggregator.
31       */
32      public void useOwnFunction() throws Exception {
33          AbstractNoStoreAggregator<Boolean> or = new AbstractNoStoreAggregator<Boolean>( new OwnBinaryFunction() ) {
34              @Override
35              protected Boolean initialValue() {
36                  return false;
37              }
38          };
39          or.add( false );
40          System.out.println( "OR : " + or.evaluate() );
41          or.add( true );
42          System.out.println( "OR : " + or.evaluate() );
43          or.add( false );
44          System.out.println( "OR : " + or.evaluate() );
45      }
46  
47      /**
48       * This class implements a logical OR: it OR's the 2 parameters passed in
49       * and returns the result.
50       * (There are similar implementations already in functor, this is just to
51       * be used as an example for doing this with a nostore aggregator.
52       */
53      static class OwnBinaryFunction implements BinaryFunction<Boolean, Boolean, Boolean> {
54          public Boolean evaluate(Boolean left, Boolean right) {
55              return left.booleanValue() || right.booleanValue();
56          }
57      }
58  }