class CollectionFunctions {

    public static <T, R, S> List<R> zipAndMapWithIndex(List<T> list1, List<S> list2, TriFunction<T, S, Integer, R> triFunction) {

        List<R> resultList = new ArrayList<>();
        zipWithIndex(list1, list2, (o1, o2, index) -> resultList.add(triFunction.apply(o1, o2, index)));
        return resultList;
    }

    private  CollectionFunctions();

}