code: private static List<Object> convertLogicalList(Group g, boolean binaryAsString)
    {
      /*
        // List<Integer> (nullable list, non-null elements)
        optional group my_list (LIST) {
          repeated int32 element;
        }
  
        // List<Tuple<String, Integer>> (nullable list, non-null elements)
        optional group my_list (LIST) {
          repeated group element {
            required binary str (UTF8);
            required int32 num;
          };
        }
  
        // List<OneTuple<String>> (nullable list, non-null elements)
        optional group my_list (LIST) {
          repeated group array {
            required binary str (UTF8);
          };
        }
  
        // List<OneTuple<String>> (nullable list, non-null elements)
        optional group my_list (LIST) {
          repeated group my_list_tuple {
            required binary str (UTF8);
          };
        }
       */
      assert isLogicalListType(g.getType());
      int repeated = g.getFieldRepetitionCount(0);
      boolean isListItemPrimitive = g.getType().getFields().get(0).isPrimitive();
      List<Object> vals = new ArrayList<>();
  
      for (int i = 0; i < repeated; i++) {
        if (isListItemPrimitive) {
          vals.add(convertPrimitiveField(g, 0, i, binaryAsString));
        } else {
          Group listItem = g.getGroup(0, i);
          vals.add(listItem);
        }
      }
      return vals;
    }
docs: convert a parquet 'list' logical type {@link Group} to a java list of primitives or groups