public static List<Criterion> parse(String filter) {
    return StreamSupport.stream(CRITERIA_SPLITTER.split(filter).spliterator(), false)
      .map(FilterParser::parseCriterion)
      .toList();
  }
@Test
  public void parse_filter_having_value_containing_operator_characters() {
    List<Criterion> criterion = FilterParser.parse("languages IN (java, python, <null>)");

    assertThat(criterion)
      .extracting(Criterion::getKey, Criterion::getOperator, Criterion::getValues, Criterion::getValue)
      .containsOnly(
        tuple("languages", IN, asList("java", "python", "<null>"), null));
  }