I need to write a loop that will see if the values in a HashMap are equal and if they are see how many times they occur. Sets of numbers will be entered in through the Scanner (example input will be below) The following code will put the key of count and the value of the HashSet into the hashMap.
public static void main(String[] args) {
System.out.println("Type in your numbers followed by spaces and press enter");
System.out.println("After every set entered type in any letter to enter more sets");
System.out.println("Or enter * to finish");
HashMap<Integer, HashSet<Integer>> hset = new HashMap<>();
Scanner sc = new Scanner(System.in);
int count = 1;
HashSet<Integer> list = new HashSet<>();
while(sc.hasNextLine()) {
while(sc.hasNextInt()) {
list.add(sc.nextInt());
}
hset.put(count, new HashSet<>(list));
count++;
list.clear();
sc.nextLine();
if(sc.nextLine().equals("*")) {
System.out.println("working");
break;
}
}
for(int i=0; i<count; i++){
//some code goes here
//if(hset.get(x) == hset.get(j)) or something along these lines
}
}
//Sample Scanner input
1 2 3 4 5
10 9 8 7
5 4 3 2 1
1 1 1 1 1
1 2 3 5
1 2 3 6
6 4 2
2 4 6
4 2 6
4 6 2
6 2 4
1 3 2 4 5
15 14 13
5 3 2 1
79
7 9
//What I need the output to look like
[7, 9]=1
[1]=1
[7, 8, 9, 10]=1
[13, 14, 15]=1
[1, 2, 3, 5]=2
[1, 2, 3, 6]=1
[2, 4, 6]=5
[1, 2, 3, 4, 5]=3
[79]=1
Given the above input in a List of List form, you can do it as follows:
List<List<Integer>> list = List.of(List.of(1, 2, 3, 4, 5),
List.of(10, 9, 8, 7), List.of(5, 4, 3, 2, 1),
List.of(1, 1, 1, 1, 1), List.of(1, 2, 3, 5),
List.of(1, 2, 3, 6), List.of(6, 4, 2),
List.of(2, 4, 6), List.of(4, 2, 6), List.of(4, 6, 2),
List.of(6, 2, 4), List.of(1, 3, 2, 4, 5),
List.of(15, 14, 13), List.of(5, 3, 2, 1), List.of(79),
List.of(7, 9));
sets
with the same values compare equally without regard to order.Map<Set<Integer>, Long>
Map<Set<Integer>, Long> map = list.stream().map(lst->new HashSet<>(lst))
.collect(Collectors.groupingBy(a->a,
Collectors.counting()));
Prints
[7, 9]=1
[1]=1
[7, 8, 9, 10]=1
[13, 14, 15]=1
[1, 2, 3, 5]=2
[2, 4, 6]=5
[1, 2, 3, 6]=1
[79]=1
[1, 2, 3, 4, 5]=3
I would do it like this:
System.out.println("Type in your numbers followed by spaces and press enter");
System.out.println("After every set entered type in any letter to enter more sets");
System.out.println("Or enter * to finish");
Scanner sc = new Scanner(System.in);
Map<Set<Integer>, Integer> setCounts = new HashMap<>();
do {
if (sc.hasNextInt()) {
Set<Integer> set = new TreeSet<>();
do {
set.add(sc.nextInt());
} while (sc.hasNextInt());
setCounts.compute(set, (key, count) -> count != null ? count + 1 : 1);
}
} while (sc.hasNext() && ! sc.next().equals("*"));
setCounts.entrySet().forEach(System.out::println);
Numbers from question, changed to fit printed instructions
1 2 3 4 5 x
10 9 8 7 x
5 4 3 2 1 x
1 1 1 1 1 x
1 2 3 5 x
1 2 3 6 x
6 4 2 x
2 4 6 x
4 2 6 x
4 6 2 x
6 2 4 x
1 3 2 4 5 x
15 14 13 x
5 3 2 1 x
79 x
7 9 x
*
Output
[7, 9]=1
[1]=1
[7, 8, 9, 10]=1
[13, 14, 15]=1
[1, 2, 3, 5]=2
[2, 4, 6]=5
[1, 2, 3, 6]=1
[79]=1
[1, 2, 3, 4, 5]=3
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.