使用Java 8

时间:2018-11-30 07:46:45

标签: java lambda java-8 java-stream

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()和其他流操作来解决此问题,但我不知道该如何解决。

1 个答案:

答案 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();

根据上述条件进行过滤,然后找到最小尺寸的条目列表。