public List<String> getVehicles() {
        return getEncodedValues().stream()
                .filter(ev -> ev.getName().endsWith("_access"))
                .map(ev -> ev.getName().replaceAll("_access", ""))
                .filter(v -> getEncodedValues().stream().anyMatch(ev -> ev.getName().contains(VehicleSpeed.key(v))))
                .collect(Collectors.toList());
    }
@Test
    public void testGetVehicles() {
        EncodingManager em = EncodingManager.start()
                .add(VehicleAccess.create("car"))
                .add(VehicleAccess.create("bike")).add(VehicleSpeed.create("bike", 4, 2, true))
                .add(VehicleSpeed.create("roads", 5, 5, false))
                .add(VehicleAccess.create("hike")).add(new DecimalEncodedValueImpl("whatever_hike_average_speed_2022", 5, 5, true))
                .add(RoadAccess.create())
                .build();
        // only for bike+hike there is access+'speed'
        assertEquals(Arrays.asList("bike", "hike"), em.getVehicles());
    }