code: private static List<ILexLocation> removeDuplicates(List<ILexLocation> locations)
  	{
  		
  		// Map merging function
  	    BinaryOperator<Vector<ILexLocation>> merge = (old, latest)-> {
  	    	
  	    	for (ILexLocation location : latest)
  			{
  				if (location.getHits() > 0)
  				{
  					// Remove objects with 0 hits in the equivalence class
  					for(ILexLocation loc : old)
  						if(loc.getHits() == 0) old.remove(loc);
  				
  					old.add(location);
  				}
  				else
  				{
  					// According to previous function if all are 0 hits that is OK 
  					// TODO: Check if that is expected! 
  					boolean allZeroHits = true;
  					
  					for(ILexLocation loc : old)
  						if(loc.getHits() > 0)
  						{
  							allZeroHits = false; 
  							break;
  						}
  						
  					if(allZeroHits) old.add(location);	
  				}
  			}
  			
  	        return old;
  	    };
  	    
  	    // Remove duplicate hits
  		Map<String, Vector<ILexLocation>> map = locations.stream()
  				.collect(Collectors.toMap(loc -> ((ILexLocation)loc).getFile() + 
  		                                         ((ILexLocation)loc).getModule() +  
  		                                         "l" +
  		                                         ((ILexLocation)loc).getStartLine() +
  		                                         "p" +
  		                                         ((ILexLocation)loc).getStartPos(), 
  		                                  loc -> new Vector<ILexLocation>(Arrays.asList(loc)),
  		                                  merge)
  		        		);
  		 
  		return map.values()
  				.parallelStream()
  				.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);		
  	
  	}
docs: This method handles the case where a location exist both with hits>0 and hits==0. It will remove the location
  with hits==0 when another location hits>0 exists.
  
  
  The strategy is to build a map with the elements of ILexLocation that are used when test equality as keys
  and the list of objects on the equivalence class as values.
  
  In the merging of the map (clash of keys) we deal with duplicates
  
  @param locations
  @return the list of locations where the unwanted locations have been removed