List<List<Word>> getDifferentArguments(List<List<Word>> argumentWords) {
        List<List<Word>> result = Lists.newArrayList();
        for (int i = 0; i < argumentWords.size(); i++) {
            result.add(Lists.newArrayList());
        }

        int numberOfWords = argumentWords.get(0).size();

        for (int wordCounter = 0; wordCounter < numberOfWords; wordCounter++) {
            Word wordOfFirstCase = argumentWords.get(0).get(wordCounter);

            // data tables have equal here, otherwise
            // the cases would be structurally different
            if (wordOfFirstCase.isDataTable()) {
                continue;
            }

            boolean different = false;
            for (int caseCounter = 1; caseCounter < argumentWords.size(); caseCounter++) {
                Word wordOfCase = argumentWords.get(caseCounter).get(wordCounter);
                if (!wordOfCase.getFormattedValue().equals(wordOfFirstCase.getFormattedValue())) {
                    different = true;
                    break;
                }

            }
            if (different) {
                for (int caseCounter = 0; caseCounter < argumentWords.size(); caseCounter++) {
                    result.get(caseCounter).add(argumentWords.get(caseCounter).get(wordCounter));
                }
            }
        }

        return result;
    }
Returns a list with argument words that are not equal in all cases.
jgiven-core/src/main/java/com/tngtech/jgiven/report/analysis/CaseArgumentAnalyser.java