private ConcurrentMap<Long, Set<InstantCodeFragmentInfo>> categorizeFragments( Collection<InstantCodeFragmentInfo> fragments) { final ConcurrentMap<Long, Set<InstantCodeFragmentInfo>> result = new ConcurrentHashMap<Long, Set<InstantCodeFragmentInfo>>(); final long length = fragments.size(); long count = 0; for (final InstantCodeFragmentInfo fragment : fragments) { if (result.containsKey(fragment.getHash())) { result.get(fragment.getHash()).add(fragment); } else { final Set<InstantCodeFragmentInfo> newSet = new HashSet<InstantCodeFragmentInfo>(); newSet.add(fragment); result.put(fragment.getHash(), newSet); } if (++count % 10000 == 0) { System.out.println( "\t[" + count + "/" + length + "] 1st step processed " + count + " elements"); } } System.out.println("\t[" + count + "/" + length + "] 1st step processed all elements"); return result; }