如何在 Collector 中使用 If 语句?
How can I use an If-statement inside the Collector?
我需要的输出是这样的:
"Versions" : [("0.1","true"),("0.2","false"),("0.3","true")]
这个输出的结构是:Map<String, List<Pair<String, String>>>
其中 "Versions"
是 Map 的键,[("0.1","true"),("0.2","false"),("0.3","true")]
这是 Map
的值。
现在,在 Map
中我们有一个 List
像:List<Pair<String, String>>
例如:[("0.1","true"),("0.2","false"),("0.3","true")]
其中 "0.1","0.2","0.3"
是 Pair
的键,"true","false","true"
是 Pair
的值。
如何为此 Pair
编写 if-else
语句?对于特定条件,我希望 Pair
的值返回为 true
或 false
?
您可以通过调用静态方法 Map.entry()
来利用现有的映射条目实现,该方法需要一个键和一个值(仅适用于 Java 9 及更高版本) 或者直接调用map入口的构造函数:
new AbstractMap.SimpleEntry<>(key, value)
属性 key 定义为 final
并且 value 是可变的。如果您对此不满意(例如,如果您需要一个不可变对象),您可以定义自己的class Pair
.
public class Pair<K, V> {
private final K key;
private final V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
// getters
}
How do I write an if-else
statement for this Pair
? Where for a particular condition I want the value of the Pair
to be returned as true
or false
?
对于您的条件逻辑(if
您提到的语句),您可以在收集器中 in-line (如下图)或者提取到一个单独的方法中,如果有多个条件,这将是一个更好的选择。
您的代码唯一需要做的更改是将 Collectors.mapping()
中的字符串连接替换为创建映射条目的表达式( 或您的自定义 class) 将表示版本的连接字符串作为键,将条件的结果作为值。
Collectors.mapping(cae -> Map.entry(cae.getMajorVersion() + "." + cae.getMinorVersion(),
String.valueOf(your_condition)),
Collectors.toList())
创建一个 method/Function 接受 CorporateActionEvent
和 returns 一个 Pair<String, String>
:
public static Pair<String, String> getPair(CorporateActionEvent cae){
boolean myCondition; //= check whatever
String key = cae.getMajorVersion() + "." + cae.getMinorVersion();
return new Pair(key, String.valueOf(myCondition));
}
并通过调整对应的映射来使用
....Collectors.mapping(cae -> getPair(cae), Collectors.toList())));
或使用方法参考,假设您将 getPair
方法放在 CorporateActionEvent
class:
....Collectors.mapping(CorporateActionEvent::getPair, Collectors.toList())));
我需要的输出是这样的:
"Versions" : [("0.1","true"),("0.2","false"),("0.3","true")]
这个输出的结构是:Map<String, List<Pair<String, String>>>
其中 "Versions"
是 Map 的键,[("0.1","true"),("0.2","false"),("0.3","true")]
这是 Map
的值。
现在,在 Map
中我们有一个 List
像:List<Pair<String, String>>
例如:[("0.1","true"),("0.2","false"),("0.3","true")]
其中 "0.1","0.2","0.3"
是 Pair
的键,"true","false","true"
是 Pair
的值。
如何为此 Pair
编写 if-else
语句?对于特定条件,我希望 Pair
的值返回为 true
或 false
?
您可以通过调用静态方法 Map.entry()
来利用现有的映射条目实现,该方法需要一个键和一个值(仅适用于 Java 9 及更高版本) 或者直接调用map入口的构造函数:
new AbstractMap.SimpleEntry<>(key, value)
属性 key 定义为 final
并且 value 是可变的。如果您对此不满意(例如,如果您需要一个不可变对象),您可以定义自己的class Pair
.
public class Pair<K, V> {
private final K key;
private final V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
// getters
}
How do I write an
if-else
statement for thisPair
? Where for a particular condition I want the value of thePair
to be returned astrue
orfalse
?
对于您的条件逻辑(if
您提到的语句),您可以在收集器中 in-line (如下图)或者提取到一个单独的方法中,如果有多个条件,这将是一个更好的选择。
您的代码唯一需要做的更改是将 Collectors.mapping()
中的字符串连接替换为创建映射条目的表达式( 或您的自定义 class) 将表示版本的连接字符串作为键,将条件的结果作为值。
Collectors.mapping(cae -> Map.entry(cae.getMajorVersion() + "." + cae.getMinorVersion(),
String.valueOf(your_condition)),
Collectors.toList())
创建一个 method/Function 接受 CorporateActionEvent
和 returns 一个 Pair<String, String>
:
public static Pair<String, String> getPair(CorporateActionEvent cae){
boolean myCondition; //= check whatever
String key = cae.getMajorVersion() + "." + cae.getMinorVersion();
return new Pair(key, String.valueOf(myCondition));
}
并通过调整对应的映射来使用
....Collectors.mapping(cae -> getPair(cae), Collectors.toList())));
或使用方法参考,假设您将 getPair
方法放在 CorporateActionEvent
class:
....Collectors.mapping(CorporateActionEvent::getPair, Collectors.toList())));