import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.IntStream; public class CellSample { private List cells; private Integer cdr1Freq; public CellSample(Integer numDistinctCells, Integer cdr1Freq){ this.cdr1Freq = cdr1Freq; List numbersCDR3 = new ArrayList<>(); List numbersCDR1 = new ArrayList<>(); Integer numDistCDR3s = 2 * numDistinctCells + 1; IntStream.range(1, numDistCDR3s + 1).forEach(i -> numbersCDR3.add(i)); IntStream.range(numDistCDR3s + 1, numDistCDR3s + 1 + (numDistCDR3s / cdr1Freq) + 1).forEach(i -> numbersCDR1.add(i)); Collections.shuffle(numbersCDR3); Collections.shuffle(numbersCDR1); //Each cell represented by 4 values //two CDR3s, and two CDR1s. First two values are CDR3s (alpha, beta), second two are CDR1s (alpha, beta) List distinctCells = new ArrayList<>(); for(int i = 0; i < numbersCDR3.size() - 1; i = i + 2){ Integer tmpCDR3a = numbersCDR3.get(i); Integer tmpCDR3b = numbersCDR3.get(i+1); Integer tmpCDR1a = numbersCDR1.get(i % numbersCDR1.size()); Integer tmpCDR1b = numbersCDR1.get((i+1) % numbersCDR1.size()); Integer[] tmp = {tmpCDR3a, tmpCDR3b, tmpCDR1a, tmpCDR1b}; distinctCells.add(tmp); } this.cells = distinctCells; } public CellSample(List cells, Integer cdr1Freq){ this.cells = cells; this.cdr1Freq = cdr1Freq; } public List getCells(){ return cells; } public Integer getCdr1Freq() { return cdr1Freq; } public Integer getCellCount(){ return cells.size(); } }