All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ua.co.gravy.tuplets.Octuplet Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2017 Vitaliy Berdinskikh
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *	   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ua.co.gravy.tuplets;


import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;


/**
 * Group of eight.
 *
 * @param  type of first element
 * @param  type of second element
 * @param  type of third element
 * @param  type of fourth element
 * @param  type of fifth element
 * @param  type of sixth element
 * @param 

type of seventh element * @param type of eighth element * @author Vitaliy Berdinskikh, ur6lad * @since 1.0 */ public final class Octuplet extends AbstractTuplet { private static final int ARITY = 8; private final S first; private final D second; private final T third; private final A fourth; private final I fifth; private final X sixth; private final P seventh; private final O eighth; public Octuplet(S first, D second, T third, A fourth, I fifth, X sixth, P seventh, O eighth) { this.first = first; this.second = second; this.third = third; this.fourth = fourth; this.fifth = fifth; this.sixth = sixth; this.seventh = seventh; this.eighth = eighth; } /** * Get first element. * * @return first element */ public S first() { return first; } /** * Get second element. * * @return second element */ public D second() { return second; } /** * Get third element. * * @return third element */ public T third() { return third; } /** * Get fourth element. * * @return fourth element */ public A fourth() { return fourth; } /** * Get fifth element. * * @return fifth element */ public I fifth() { return fifth; } /** * Get sixth element. * * @return sixth element */ public X sixth() { return sixth; } /** * Get seventh element. * * @return seventh element */ public P seventh() { return seventh; } /** * Get eighth element. * * @return eighth element */ public O eighth() { return eighth; } @Override public Object get(int index) throws IndexOutOfBoundsException { Object result; switch (index) { case 0: result = first; break; case 1: result = second; break; case 2: result = third; break; case 3: result = fourth; break; case 4: result = fifth; break; case 5: result = sixth; break; case 6: result = seventh; break; case 7: result = eighth; break; default: throw new IndexOutOfBoundsException("Index " + index + " is out of bounds of octuplet!"); } return result; } @Override public int length() { return ARITY; } @Override public Stream stream() { return Stream.of(first, second, third, fourth, fifth, sixth, seventh, eighth); } @Override public Object[] toArray() { return new Object[] { first, second, third, fourth, fifth, sixth, seventh, eighth }; } @Override public List toList() { return Arrays.asList(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as first element and copy other. * * @param first first element * @return new octuplet */ public Octuplet withFirst(S first) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as second element and copy other. * * @param second second element * @return new octuplet */ public Octuplet withSecond(D second) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as third element and copy other. * * @param third third element * @return new octuplet */ public Octuplet withThird(T third) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as fourth element and copy other. * * @param fourth fourth element * @return new octuplet */ public Octuplet withFourth(A fourth) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as fifth element and copy other. * * @param fifth fifth element * @return new octuplet */ public Octuplet withFifth(I fifth) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as sixth element and copy other. * * @param sixth sixth element * @return new octuplet */ public Octuplet withSixth(X sixth) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as seventh element and copy other. * * @param seventh seventh element * @return new octuplet */ public Octuplet withSeventh(P seventh) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } /** * Make new octuplet: set parameter as eighth element and copy other. * * @param eighth eighth element * @return new octuplet */ public Octuplet withEighth(O eighth) { return new Octuplet<>(first, second, third, fourth, fifth, sixth, seventh, eighth); } }