Generate random pairs of from list of integer without duplication of the number

I have to list of integer like {1,3,4,5,6,7}
I would like to generate an array, which contains pairs from the a and b arrays, in a random order, without duplicates. For example I would like to get the following result:

c={(1,5),(3,7),(4,6),…}

and if we found odd numbers, then it should give us any random selection for that last number

{1,3,4,5,6,7,8}

c={(1,5),(3,7),(4,6,8),…}

I have used below code to achieve this, but it’s not working as expected.

int[] a={1,2,3,4,5};
    int[] b={6,7};
    List<int[]> list = new ArrayList<>();
    for (int i = 0; i < a.length; ++i)
        for (int j = 0; j < b.length; ++j)
            list.add(new int[] {a[i], b[j]});
    Collections.shuffle(list);

Thanks!

>Solution :

I have worked on the similar problem. I hope below code will help you.

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class PairMap {

    public static void main(String[] args) {
        LinkedList<Integer> userList = new LinkedList<>(IntStream.range(1, 18).boxed().collect(Collectors.toList()));
        List<Set<Integer>> usersPairs = new ArrayList<>();
        
        Collections.shuffle(userList);
        
        while(userList.size() > 1)
        {
            Set<Integer> userSet = new TreeSet<>();
            userSet.add(userList.removeFirst());
            userSet.add(userList.removeFirst());
            usersPairs.add(userSet);
            
        }
        
        Random r = new Random();
        if(userList.size() == 1 && !usersPairs.isEmpty()) {
                usersPairs.get(r.nextInt(usersPairs.size())).add(userList.removeFirst());
        }
        System.out.println(usersPairs);
    }

}

Leave a Reply