public int match(Person other, String category){
        List<String> selfops = target.get(category);
        List<String> targetops = other.self.get(category);
        if (selfops == null || targetops == null) return 0;
        Option op = Option.get(category);
        if (op == null) {
            throw new RuntimeException("no such category");
        }
        return selfops
          .parallelStream().mapToInt(a
            -> targetops.parallelStream()
            .mapToInt(b -> op.rule.test(a, b) ? 1 : 0).sum()
          ).sum();
    }