Java ListIterator Usage incrementalComponentWiseAverageArbitraryDepth(Object average, int n, Object newItems)

Here you can find the source of incrementalComponentWiseAverageArbitraryDepth(Object average, int n, Object newItems)

Description

A more general version of incrementalComputationOfComponentWiseAverage(List, int, List) that operates on lists of lists of arbitrary depth, including depth 0, that is, on Number s.

License

Open Source License

Parameter

Parameter Description
average previously calculated averages.
n averages out of 'n' numbers.
newItems new numbers.

Return

an incrementally calculated component-wise average.

Declaration

@SuppressWarnings("unchecked")
public static Object incrementalComponentWiseAverageArbitraryDepth(Object average, int n, Object newItems) 

Method Source Code

//package com.java2s;
/*//from   ww w.  ja  v  a 2  s  . c om
 * Copyright (c) 2013, SRI International
 * All rights reserved.
 * Licensed under the The BSD 3-Clause License;
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 * 
 * http://opensource.org/licenses/BSD-3-Clause
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * Neither the name of the aic-util nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */

import java.util.Arrays;

import java.util.LinkedHashSet;

import java.util.List;
import java.util.ListIterator;

import java.util.Set;

public class Main {
    /**
     * A more general version of incrementalComputationOfComponentWiseAverage(List, int,
     * List) that operates on lists of lists of arbitrary depth,
     * including depth 0, that is, on {@link Number}s. It is in-place and
     * returns <code>average</code> if given objects are lists, or returns a new
     * Number otherwise.
     * 
     * @param average
     *            previously calculated averages.
     * @param n
     *            averages out of 'n' numbers.
     * @param newItems
     *            new numbers.
     * @return an incrementally calculated component-wise average.
     */
    @SuppressWarnings("unchecked")
    public static Object incrementalComponentWiseAverageArbitraryDepth(Object average, int n, Object newItems) {
        if (average instanceof Number) {
            return (((Number) average).doubleValue() * n + ((Number) newItems).doubleValue()) / (n + 1);
        }
        ListIterator averageIterator = ((List<Number>) average).listIterator();
        ListIterator newItemsIt = ((List) newItems).listIterator();
        while (averageIterator.hasNext()) {
            Object averageElement = averageIterator.next();
            Object newItemsElement = newItemsIt.next();
            Object newAverageElement = incrementalComponentWiseAverageArbitraryDepth(averageElement, n,
                    newItemsElement);
            if (newAverageElement != averageElement) {
                averageIterator.set(newAverageElement);
            }
        }
        return average;
    }

    public static <T> Set<T> set(T... elements) {
        return new LinkedHashSet<T>(Arrays.asList(elements));
    }
}

Related

  1. getCamelNameSegments(String camelName)
  2. getCurrentElement(ListIterator listIterator)
  3. getLastNonNull(List l)
  4. goToFirst(ListIterator iterator)
  5. gotoIndex(ListIterator iterator, int index)
  6. indexOf(List list, E object)
  7. insertBefore(List list, E... elements)
  8. intern(ListIterator in)
  9. internStringsInList(List list)