最简单的问题是我有一个集合,我想删除/删除value == null
的所有元素。我不希望删除到位(我想获得新的地图,所以我的原始地图是安全的)。
public Map<String, String> ADDITIONAL_QUERY = new HashMap<>();
this.ADDITIONAL_QUERY.put("deviceManufacturer", payload.getManufacturer());
this.ADDITIONAL_QUERY.put("deviceModel", payload.getModel());
this.ADDITIONAL_QUERY.put("source", payload.getSource());
this.ADDITIONAL_QUERY.put("adrIMEI", payload.getIMEI());
this.ADDITIONAL_QUERY.put("adrMEID", payload.getMEID());
this.ADDITIONAL_QUERY.put("adrUDID", payload.getUuid() == null ? null : payload.getUuid().toString());
this.ADDITIONAL_QUERY.put("adrID", payload.getAndroidId());
this.ADDITIONAL_QUERY.put("adrSERIAL", payload.getSerial());
我向ADDITIONAL_QUERY添加更多元素取决于我稍后调用的API。
我刚刚将我的Retrofit lib升级到2.0版。我的大多数API(大约100个API)都有@FieldMap Map<String, String> additionalQuery
个。根据他们的文档考虑FieldMap
,“表单编码请求的命名键/值对。不允许地图的空值,作为键,或作为值。”,如java doc中所述(这很有趣,他们的网络文档说你可以https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/class-use/FieldMap.html)。
随着API被大量调用,我正在寻找一种方式,但开销很小,当然也很快。
答案 0 :(得分:4)
您可以使用:
data.write.format('com.databricks.spark.csv').options(delimiter="\t", codec="org.apache.hadoop.io.compress.GzipCodec").save('s3a://myBucket/myPath')
答案 1 :(得分:0)
如果你有Guava,你可以创建一个过滤后的视图,以避免复制到新地图:
Map<String, String> filtered = Maps.filterValues(ADDITIONAL_QUERY, new Predicate<String>() {
@Override
public boolean apply(String value) {
return value != null;
}
});
由于您使用的是Java 8,因此可以缩短谓词:
Map<String, String> filtered = Maps.filterValues(ADDITIONAL_QUERY, Objects::nonNull);
答案 2 :(得分:0)
您可以使用:
Map newMap = (HashMap) ADDITIONAL_QUERY.clone();;
newMap.values().remove(null);
答案 3 :(得分:0)
可能的解决方案如下:
SET @query = CAST('
declare @testStatus varchar(20);
IF (
SELECT COUNT(*)
FROM [' +@dbname+ '].dbo.Table1
WHERE [' +@dbname+ '].dbo.Table1.Column1 = ''''
) = 0
SET @testStatus = ''Test Passed''
ELSE
SET @testStatus = ''Test Failed''
INSERT INTO [Database].dbo.Table2(FileName, Result, Date)
VALUES (''File1'', @testStatus, GETDATE())'
AS NVARCHAR(MAX))
如果地图很大,那么您甚至可以使用public <K, V> Map<K,V> removeNulls(Map<K,V> original) {
return original.entrySet().stream().filter(e -> e.getValue() != null)
.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
}
代替parallelStream()
答案 4 :(得分:0)
这应该有效:
map.values().removeIf(Objects::isNull);