Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从给定列表中获取格式化字符串_Java_Lambda_Java 8 - Fatal编程技术网

Java 从给定列表中获取格式化字符串

Java 从给定列表中获取格式化字符串,java,lambda,java-8,Java,Lambda,Java 8,我想从给定的列表中创建查询字符串。 有没有什么简单的方法可以在一行中使用StringJoiner和lambda Map<String, List<String>> filters = new HashMap<>(); List<String> cities = Arrays.asList("US", "UK", "ASIA"); List<String> products = Arrays.asList

我想从给定的列表中创建查询字符串。 有没有什么简单的方法可以在一行中使用
StringJoiner
和lambda

 Map<String, List<String>> filters = new HashMap<>();
        List<String> cities = Arrays.asList("US", "UK", "ASIA");
        List<String> products = Arrays.asList("Car", "Mobile", "Plane");

        filters.put("product", products);
        filters.put("city", cities);
        // I want following as o/p :
        // (product='Car' OR product='Mobile') AND (City='US' OR City='UK')

    }
Map filters=newhashmap();
列出城市=数组。asList(“美国”、“英国”、“亚洲”);
列表产品=数组;
过滤器。放置(“产品”,产品);
过滤器。放入(“城市”,城市);
//我想要以下作为o/p:
//(product='Car'或product='Mobile')和(City='US'或City='UK')
}
您可以尝试以下方法:

        //data init
        Map<String, List<String>> elements = new HashMap();
        elements.put("City", Arrays.asList("US", "UK"));
        elements.put("product", Arrays.asList("Car", "Mobile"));
        //create by one line
        System.out.println(elements.keySet().stream().map(key -> "(" +
                elements.get(key).stream().map(one -> key + " = '" + one + "'").collect(Collectors.joining(" OR "))
                + ")").collect(Collectors.joining(" AND ")));

您不需要将列表复制到
ArrayList
s中。只是
List cities=Arrays.asList(“美国”、“英国”、“德国”),products=Arrays.asList(“汽车”、“手机”、“桌子”)已足够。然后,假设集合不是空的,您可以简单地使用
“(product='”+String.join(“'OR product='”,products)+“')和(City='”+String.join(“'OR City='”,cities)+“)”
。这是一个好主意,我已经对其进行了相应的更改。您的建议更灵活。我更改了代码,使用“+”而不是StringBuilder.append~,看起来更好
(product = 'Car' OR product = 'Mobile') AND (City = 'US' OR City = 'UK')