@Override public ModelDescriptor lookupServiceModel( Type serviceType ) { return serviceModels.computeIfAbsent( serviceType, key -> allServices().collect( HasTypesCollectors.matchingType( key ) ).orElse( null ) ); }
@Test public void selectMatchingType() { List<ValueType> valueTypes = Arrays.asList( ValueType.of( String.class ), ValueType.of( Double.class ), ValueType.of( Integer.class ) ); Optional<ValueType> number = valueTypes.stream() .collect( HasTypesCollectors.matchingType( Number.class ) ); assertTrue( number.isPresent() ); assertThat( number.get(), equalTo( ValueType.of( Double.class ) ) ); Optional<ValueType> integer = valueTypes.stream() .collect( HasTypesCollectors.matchingType( Integer.class ) ); assertTrue( integer.isPresent() ); assertThat( integer.get(), equalTo( ValueType.of( Integer.class ) ) ); }
@Test public void selectMatchingValueType() { List<ValueType> valueTypes = Arrays.asList( ValueType.of( String.class ), ValueType.of( Number.class, Integer.class ), ValueType.of( Integer.class ), ValueType.of( Number.class ) ); Optional<ValueType> number = valueTypes.stream() .collect( HasTypesCollectors.matchingType( ValueType.of( Number.class ) ) ); assertTrue( number.isPresent() ); assertThat( number.get(), equalTo( ValueType.of( Number.class ) ) ); Optional<ValueType> integer = valueTypes.stream() .collect( HasTypesCollectors.matchingType( ValueType.of( Integer.class ) ) ); assertTrue( integer.isPresent() ); assertThat( integer.get(), equalTo( ValueType.of( Integer.class ) ) ); Optional<ValueType> both = valueTypes.stream() .collect( HasTypesCollectors.matchingType( ValueType.of( Number.class, Integer.class ) ) ); assertTrue( both.isPresent() ); assertThat( both.get(), equalTo( ValueType.of( Number.class, Integer.class ) ) ); }