簡體   English   中英

Java:匿名集<t>在 function 調用中</t>

[英]Java: anonymous Set<T> inside a function call

正如在這個問題中發現的匿名 arrays in Java我嘗試了相同的程序java.utils.Set ,但它不起作用。

如果我有

private HashMap<String, String[]> flags;

我可以很容易地打電話

this.flags.put("test", new String[]{"value"});

但隨着

private HashMap<String, Set<String>> flags;

不起作用

this.flags.put("test", new Set<String>().add("value"));

將匿名 Set 傳遞給 Java 中的 function 的正確方法是什么?

嘗試這個:

首次遇到時,它將添加HashSet並添加值。 下次遇到它時,它會將值添加到 hashSet。

this.flags.computeIfAbsent("test", v-> new HashSet<>()).add("value");

Set.of

如果您希望您的新集合是non-modifiable並且沒有 null 值,請使用Set.of

private Map< String , Set< String > > flags = new HashMap<>() ;
…
this.flags.put( "test" , Set.of( "value" ) );

如果您嘗試添加匿名 Set,那么在這種情況下,您還需要擁有 Set 的完整實現 -

前任:

        HashMap<String, Set<String>> valueMap = new HashMap<>();


        valueMap.put("test", new Set<String>() {

            @Override
            public boolean add(String e) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean addAll(Collection<? extends String> c) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void clear() {
                // TODO Auto-generated method stub

            }

            @Override
            public boolean contains(Object o) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean containsAll(Collection<?> c) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean isEmpty() {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public Iterator<String> iterator() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public boolean remove(Object o) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean removeAll(Collection<?> c) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean retainAll(Collection<?> c) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public int size() {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public Object[] toArray() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public <T> T[] toArray(T[] a) {
                // TODO Auto-generated method stub
                return null;
            }
        });


更好更簡單的方法是

valueMap.put("test", new HashSet<String>(){{
            add("a");
            add("b");
            add("c");
        }});

我不建議以匿名方式創建集合,而不是您可以使用一些實用方法,例如Collections.singleton用於java-89版本代碼,您可以使用 Java 及以上版本代碼。

一個不可變的集合,只包含指定的 object。

this.flags.put("test", Collections.singleton("value"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM