从Entry<String, Double>
的列表开始,我使用以下方法找到了所有组合:
public static <T> Stream<List<T>> getCombinationsStream(List<T> list) {
return LongStream.range(1 , 1 << list.size())
.mapToObj(l -> bitMapToList(l, list));
}
现在,我只想将结果条目列表过滤为仅具有所有其值之和的人
entry.getValue()
等于已知数字。
List<Entry<String, Double>> myList;
double value = 100;
//...
List<List<Entry<String, Double>>> allCombinations = Permutations.getCombinationsStream(myList)
.collect(Collectors.toList());
此后,我的目标是仅获取具有最小总和等于我的值(即100)的条目列表
示例:
/*
* allCombinatinos example
*
* [[k1=90.0],[k2=30],[k3=70],
* [k1=90.0, k2=30],[k1=90.0, k3=70],[k2=30, k3=70],
* [k1=90.0, k2=30, k3=70]]
*/
使用此列表,预期结果将只是一个列表:
//result
[k2=30, k3=70]
我认为可以通过.filter()和其他流操作来解决此问题,但我不知道该如何解决。
答案 0 :(得分:4)
这是解决问题的一种方法:
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$send_using_config = 1; // set to 1, 2, etc. to test different settings
switch ($send_using_config):
case 1:
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->SMTPSecure = FALSE;
$mail->SMTPAuth = FALSE;
$mail->SMTPAutoTLS = FALSE;
break;
case 2:
# Host amnd Port info obtained from:
# Godaddy > cPanel Home > Email > cPanel Email > Mail Configuration > "Secure SSL/TLS Settings" > Outgoing Server
$mail->Host = 'a2plcpnxyzw.prod.iad2.secureserver.net';
$mail->Port = 465;
$mail->SMTPSecure = 'ssl';
$mail->SMTPAuth = FALSE;
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => FALSE,
'verify_peer_name' => FALSE,
'allow_self_signed' => TRUE
)
);
break;
endswitch;
$mail->Username = 'you@gmail.com';
$mail->Password = 'your_gmail_password';
$mail->setFrom($from);
$mail->addAddress($to);
$mail->Subject = $subject;
$mail->msgHTML($message);
$mail->send();
根据上述条件进行过滤,然后找到最小尺寸的条目列表。