/** * Map the 4th part (T4) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T4 part * @param <R> the new type for the T4 part * @return a new {@link Tuple7} with a different T4 value */ public <R> Tuple7<T1, T2, T3, R, T5, T6, T7> mapT4(Function<T4, R> mapper) { return new Tuple7<>(t1, t2, t3, mapper.apply(t4), t5, t6, t7); }
/** * Map the 7th part (T7) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T7 part * @param <R> the new type for the T7 part * @return a new {@link Tuple7} with a different T7 value */ public <R> Tuple7<T1, T2, T3, T4, T5, T6, R> mapT7(Function<T7, R> mapper) { return new Tuple7<>(t1, t2, t3, t4, t5, t6, mapper.apply(t7)); }
/** * Map the 2nd part (T2) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T2 part * @param <R> the new type for the T2 part * @return a new {@link Tuple7} with a different T2 value */ public <R> Tuple7<T1, R, T3, T4, T5, T6, T7> mapT2(Function<T2, R> mapper) { return new Tuple7<>(t1, mapper.apply(t2), t3, t4, t5, t6, t7); }
/** * Map the 1st part (T1) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T1 part * @param <R> the new type for the T1 part * @return a new {@link Tuple7} with a different T1 value */ public <R> Tuple7<R, T2, T3, T4, T5, T6, T7> mapT1(Function<T1, R> mapper) { return new Tuple7<>(mapper.apply(t1), t2, t3, t4, t5, t6, t7); }
/** * Map the 3rd part (T3) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T3 part * @param <R> the new type for the T3 part * @return a new {@link Tuple7} with a different T3 value */ public <R> Tuple7<T1, T2, R, T4, T5, T6, T7> mapT3(Function<T3, R> mapper) { return new Tuple7<>(t1, t2, mapper.apply(t3), t4, t5, t6, t7); }
/** * Map the 5th part (T5) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T5 part * @param <R> the new type for the T5 part * @return a new {@link Tuple7} with a different T5 value */ public <R> Tuple7<T1, T2, T3, T4, R, T6, T7> mapT5(Function<T5, R> mapper) { return new Tuple7<>(t1, t2, t3, t4, mapper.apply(t5), t6, t7); }
/** * Map the 6th part (T6) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T6 part * @param <R> the new type for the T6 part * @return a new {@link Tuple7} with a different T6 value */ public <R> Tuple7<T1, T2, T3, T4, T5, R, T7> mapT6(Function<T6, R> mapper) { return new Tuple7<>(t1, t2, t3, t4, t5, mapper.apply(t6), t7); }
/** * Create a {@link Tuple7} with the given objects. * * @param t1 The first value in the tuple. Not null. * @param t2 The second value in the tuple. Not null. * @param t3 The third value in the tuple. Not null. * @param t4 The fourth value in the tuple. Not null. * @param t5 The fifth value in the tuple. Not null. * @param t6 The sixth value in the tuple. Not null. * @param t7 The seventh value in the tuple. Not null. * @param <T1> The type of the first value. * @param <T2> The type of the second value. * @param <T3> The type of the third value. * @param <T4> The type of the fourth value. * @param <T5> The type of the fifth value. * @param <T6> The type of the sixth value. * @param <T7> The type of the seventh value. * @return The new {@link Tuple7}. */ public static <T1, T2, T3, T4, T5, T6, T7> Tuple7<T1, T2, T3, T4, T5, T6, T7> of( T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) { return new Tuple7<>(t1, t2, t3, t4, t5, t6, t7); }
@Test public void sanityTestHashcode() { Tuple7<Integer, Integer, Integer, Integer, Integer, Integer, Integer> same = new Tuple7<>(1, 2, 3, 4, 5, 6, 7); Tuple7<Integer, Integer, Integer, Integer, Integer, Integer, Integer> different = new Tuple7<>(1, 2, 3, 4, 5, 6,1); assertThat(full.hashCode()) .isEqualTo(same.hashCode()) .isNotEqualTo(different.hashCode()); } }
@Test public void fn7Delegate() { Integer[] source = new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8 }; Function<Tuple7<Integer, Integer, Integer, Integer, Integer, Integer, Integer>, Tuple7> invert = t7 -> new Tuple7<>(t7.getT7(), t7.getT6(), t7.getT5(), t7.getT4(), t7.getT3(), t7.getT2(), t7.getT1()); Tuple7 tuple = Tuples.fn7(invert).apply(source); assertThat(tuple.getT1()).isEqualTo(7); assertThat(tuple.getT2()).isEqualTo(6); assertThat(tuple.getT3()).isEqualTo(5); assertThat(tuple.getT4()).isEqualTo(4); assertThat(tuple.getT5()).isEqualTo(3); assertThat(tuple.getT6()).isEqualTo(2); assertThat(tuple.getT7()).isEqualTo(1); assertThat((Object) tuple).isExactlyInstanceOf(Tuple7.class); } @Test
@Test public void nullT7Rejected() { assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> new Tuple7<>(1, 2, 3, 4, 5, 6, null)) .withMessage("t7"); }
/** * Map the 3rd part (T3) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T3 part * @param <R> the new type for the T3 part * @return a new {@link Tuple7} with a different T3 value */ public <R> Tuple7<T1, T2, R, T4, T5, T6, T7> mapT3(Function<T3, R> mapper) { return new Tuple7<>(t1, t2, mapper.apply(t3), t4, t5, t6, t7); }
/** * Map the 1st part (T1) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T1 part * @param <R> the new type for the T1 part * @return a new {@link Tuple7} with a different T1 value */ public <R> Tuple7<R, T2, T3, T4, T5, T6, T7> mapT1(Function<T1, R> mapper) { return new Tuple7<>(mapper.apply(t1), t2, t3, t4, t5, t6, t7); }
/** * Map the 7th part (T7) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T7 part * @param <R> the new type for the T7 part * @return a new {@link Tuple7} with a different T7 value */ public <R> Tuple7<T1, T2, T3, T4, T5, T6, R> mapT7(Function<T7, R> mapper) { return new Tuple7<>(t1, t2, t3, t4, t5, t6, mapper.apply(t7)); }
/** * Map the 4th part (T4) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T4 part * @param <R> the new type for the T4 part * @return a new {@link Tuple7} with a different T4 value */ public <R> Tuple7<T1, T2, T3, R, T5, T6, T7> mapT4(Function<T4, R> mapper) { return new Tuple7<>(t1, t2, t3, mapper.apply(t4), t5, t6, t7); }
/** * Map the 5th part (T5) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T5 part * @param <R> the new type for the T5 part * @return a new {@link Tuple7} with a different T5 value */ public <R> Tuple7<T1, T2, T3, T4, R, T6, T7> mapT5(Function<T5, R> mapper) { return new Tuple7<>(t1, t2, t3, t4, mapper.apply(t5), t6, t7); }
/** * Map the 2nd part (T2) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T2 part * @param <R> the new type for the T2 part * @return a new {@link Tuple7} with a different T2 value */ public <R> Tuple7<T1, R, T3, T4, T5, T6, T7> mapT2(Function<T2, R> mapper) { return new Tuple7<>(t1, mapper.apply(t2), t3, t4, t5, t6, t7); }
/** * Map the 6th part (T6) of this {@link Tuple7} into a different value and type, * keeping the other parts. * * @param mapper the mapping {@link Function} for the T6 part * @param <R> the new type for the T6 part * @return a new {@link Tuple7} with a different T6 value */ public <R> Tuple7<T1, T2, T3, T4, T5, R, T7> mapT6(Function<T6, R> mapper) { return new Tuple7<>(t1, t2, t3, t4, t5, mapper.apply(t6), t7); }
/** * Create a {@link Tuple7} with the given objects. * * @param t1 The first value in the tuple. Not null. * @param t2 The second value in the tuple. Not null. * @param t3 The third value in the tuple. Not null. * @param t4 The fourth value in the tuple. Not null. * @param t5 The fifth value in the tuple. Not null. * @param t6 The sixth value in the tuple. Not null. * @param t7 The seventh value in the tuple. Not null. * @param <T1> The type of the first value. * @param <T2> The type of the second value. * @param <T3> The type of the third value. * @param <T4> The type of the fourth value. * @param <T5> The type of the fifth value. * @param <T6> The type of the sixth value. * @param <T7> The type of the seventh value. * @return The new {@link Tuple7}. */ public static <T1, T2, T3, T4, T5, T6, T7> Tuple7<T1, T2, T3, T4, T5, T6, T7> of( T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) { return new Tuple7<>(t1, t2, t3, t4, t5, t6, t7); }