private Map<String, Set<Square>> populateZuloSquare(List<Square> squares) {
if (squares == null || squares.isEmpty()) {
return emptyMap();
}
Map<String, Set<Square>> res = new HashMap<>();
squares.stream()
.filter(square -> {
if (square.getZuloCodes().isEmpty()) {
LOG("Ignored {}", square.id);
return false;
}
return true;
})
.forEach(square -> {
square.getZuloCodes()
.forEach(code -> {
res.putIfAbsent(code, new HashSet<>());
res.get(code).add(square);
}));
});
return Collections.unmodifiableMap(res);
}
上面的代码接收一个Square列表,这些Square可能在内部包含ZuloCodes。输出应为不可变的Map zuloCode,并使用该UniquePrefix对所有平方进行赋值。 如您所见,我无法找出删除辅助集合res并使代码易于阅读的方法,有没有一种方法可以将该集合分解为[zuloCode,square],然后进行collect.groupBy?另外,如果过滤器内部不可读,您将如何解决?
答案 0 :(得分:3)
标准方法是在使用Activity
进行收集之前使用players = list()
class Player():
name = None
def __init__(self, name):
self.name = name
players.append(Entity('Adam'))
players.append(Entity('James'))
players.append(Entity('Sebastian'))
sorted_player_names = sorted([player.name for player in players], key=str.lower)
,但是由于每个元素都需要原始的flatMap
,因此需要映射到同时包含两个元素的对象{{ 1}}实例和zulo代码groupingBy
。
由于Java中还没有标准的对或元组类型(至今),一种解决方法是使用Square
实例,像这样
Square
另一种方法是使用自定义收集器,该收集器将遍历键:
String
请注意,此自定义收集器可以看作是以下循环代码的并行功能变体:
Map.Entry
当您不需要代码具有并行功能时,现在看起来可能还不错...
答案 1 :(得分:0)
如何?您可以使用[HttpPost]
public PdfResult DownloadBOLPdf(List<string> shipmentkey, List<BOLPdfInputs> BOLPdfInputs)
{
}
public class BOLPdfInputs
{
public BOLPdfInputs();
public string AgreedValue1 { get; set; }
public string AgreedValue2 { get; set; }
public decimal? CodAmount { get; set; }
public int? FreeTermsCollect { get; set; }
public int? FreeTermsCustomerCheque { get; set; }
public int? FreeTermsPrePaid { get; set; }
public int? FreightByDriverPallets { get; set; }
public int? FreightByDriverPieces { get; set; }
public int? FreightByShipper { get; set; }
public string ShipperSignature { get; set; }
public int? TrailerByDriver { get; set; }
public int? TrailerByShipper { get; set; }
}
map
操作来完成此操作。我也更新了过滤器并对其进行了简化。
merge