When a list is binded I can control how th开发者_运维百科e objects are instantiated (for instace invoke a constructor with several params) by using a custom ElementFactory in an AutoPopulatingList in this way:
public class Foo{
    private List<NestedFoo> nested = new AutoPopulatingList<NestedFoo>(new ElementFactory<NestedFoo>() {
        @Override
        public NestedFoo createElement(int index) throws ElementInstantiationException {
            return new NestedFoo(index);
        }       
    });
}
Is there any way to do something similar when the collection is a Map instead of a List? I mean when the form sends something like nested['fooParam'] I want to call a constructor with the fooParam when the map is 'auto-grown'.
Thanks.
Don't know any solution in Spring, but Guava's MapMaker class lets you create a computing map:
ConcurrentMap<Key, Graph> graphs = new MapMaker()
   .concurrencyLevel(4)
   .softKeys()
   .weakValues()
   .maximumSize(10000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function<Key, Graph>() {
         public Graph apply(Key key) {
           // this is where your values are created on demand
           return createExpensiveGraph(key);
         }
       });
Reference:
- MapMaker.makeComputingMap(Function<Key,Val>)
BTW, Apache Commons / Collections has a similar feature:
MapUtils.lazyMap(Map, Transformer)
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论