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')