Our Combination code in Java.
Combination Class File:
package miscellaneous;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Combination {
    public List<String> words;
    public int r; // min length of word
    protected List<String[]> comb_store;
    private int i;
    public Combination() {
    }
    // point of entry
    public List<String[]> possibleWordCombinations(List<String> candidates, int size) {
        words = candidates;
        r = size;
        comb_store = new ArrayList<>();
        i = 0;
        // check for conformity
        if (r <= 0 || r > words.size()) {
            comb_store = new ArrayList<>();
        } else if (r == 1) {
            for (; i < words.size(); i++) {
                comb_store.add(new String[]{words.get(i)});
            }
        } else {
            progressiveCombination();
        }
        return comb_store;
    }
    // do combinations for all 'words' element
    private void progressiveCombination() {
        //                  single member list
        repetitivePairing(Arrays.asList(words.get(i)), i + 1);
        if (i + r <= words.size()) {
            // move on to next degree
            i++;
            progressiveCombination();
        }
    }
    // do all possible combinations for 1st element of this array
    private void repetitivePairing(List<String> prefix, int position) {
        List<String>[] auxiliary_store = new List[words.size() - position];
        for (int j = 0; position < words.size(); position++, j++) {
            // check if desired -- r -- size will be realised
            if (r - prefix.size() <= words.size() - position) {
                auxiliary_store[j] = new ArrayList<>();
                auxiliary_store[j].addAll(prefix);
                auxiliary_store[j].add(words.get(position));
                if (auxiliary_store[j].size() < r) {
                    // see to adding next word on
                    repetitivePairing(auxiliary_store[j], position + 1);
                } else {
                    comb_store.add(auxiliary_store[j].toArray(new String[0]));
                }
            }
        }
    }
}Main Class:
package miscellaneous;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Miscellaneous {
    public static void main(String[] args) {
        List<String> goods = new ArrayList<>();
        goods.add("Eno");
        goods.add("Chidi");
        goods.add("Olu");
        goods.add("Ahmed");
        goods.add("Osas");
        goods.add("Gbeda");
        Combination combo = new Combination();
        List<String[]> result = combo.possibleWordCombinations(goods, 4);
        System.out.println(combo.words + " combination " + combo.r + ":\n");
        int i = 0;
        for (String[] set : result) {
            System.out.println(++i + ": " + Arrays.toString(set) + ";");
        }
        System.out.println("\nNumber of ways is " + result.size() + ".");
    }
}Try it out!
                            
                                
                                
                                
                                Elegance (0.0)
                                
                                
                                
                            
                        
                
        
            
            
        