Java 8流中过滤器的if条件

Java 8流中过滤器的if条件,java,java-8,java-stream,Java,Java 8,Java Stream,仅当选中复选框或选定索引>1时,我希望在流中使用筛选器 在下面的示例中,只有一个筛选器,但我想使用多个筛选器。是否可以实施if条件 List<SoeEntry> sortedList = soeArraylist.stream() .filter(p -> p.getEntryDoy().equals(comboBoxDoys.getSelectedItem())) .sorted( Comparator .comparing

仅当选中复选框或选定索引>1时,我希望在流中使用筛选器 在下面的示例中,只有一个筛选器,但我想使用多个筛选器。是否可以实施if条件

List<SoeEntry> sortedList = soeArraylist.stream()
   .filter(p -> p.getEntryDoy().equals(comboBoxDoys.getSelectedItem()))
   .sorted(
         Comparator
           .comparing(SoeEntry::getEntryGSAT)
           .thenComparing(SoeEntry::getEntryNumber)
          )
   .collect(Collectors.toList());
   sortedList.forEach(System.out::println);
编辑:我会再解释一遍。 假设我有3个带有项目的组合框。 一个用于DOY、一个用于GSAT和一个用于持续时间的组合框

我想要0到3个过滤器的wo过滤器。
如果我选择了DOY 025,我只想看到来自DOY 025的条目;如果我另外选择了GSAT XYZ,我只想看到来自DOY 025和GSAT XYZ的条目。如果我另外选择持续时间为30,我希望看到来自DOY 025的条目,带有GSAT XYZ,持续时间仅为30。

流本身只是收集时要执行的操作的描述,并且是不可变的。流上的每个方法都返回一个新实例。它有点像架构师,例如StringBuilder

Stream-Stream=soeArraylist.Stream; 如果Combobox1.getSelectedIndex>1{ stream=stream.filterp->p.getEntryDoy.equalscomboBox1.getSelectedItem; }否则,如果Combobox2.getSelectedIndex>1{ stream=stream.filterp->p.getEntryDoy.equalscomboBox2.getSelectedItem; }否则,如果Combobox3.getSelectedIndex>1{ stream=stream.filterp->p.getEntryDoy.equalscomboBox3.getSelectedItem; } 列表分类列表=流 .分类 比较器 .comparingSoeEntry::getEntryGSAT .Then比较seEntry::getEntryNumber .toList; System.out.printlnsortedList; 或者,先计算谓词,然后在流中使用它:

谓词; 如果Combobox1.getSelectedIndex>1{ 谓词=p->p.getEntryDoy.equalscomboBox1.getSelectedItem; }否则,如果Combobox2.getSelectedIndex>1{ 谓词=p->p.getEntryDoy.equalscomboBox2.getSelectedItem; }否则,如果Combobox3.getSelectedIndex>1{ 谓词=p->p.getEntryDoy.equalscomboBox3.getSelectedItem; }否则{ 谓词=p->true; } 列表分类列表=流 .过滤器预测 .分类 比较器 .comparingSoeEntry::getEntryGSAT .Then比较seEntry::getEntryNumber .toList; System.out.printlnsortedList;
您可以首先处理组合框(假设对象组合框)以创建谓词流链,该谓词流可以使用逻辑AND with PREDICTEAND方法打包到单个谓词中:

这可以很容易地应用:

Predicate<SoeEntry> predicate = comboboxPredicate(combobox1, combobox2, combobox3);

List<SoeEntry> sortedList = soeArraylist.stream()
   .filter(predicate)
   .sorted(Comparator.comparing(SoeEntry::getEntryGSAT)
                     .thenComparing(SoeEntry::getEntryNumber))
   .collect(Collectors.toList());

最后,我找到了一个结合您的输入的解决方案

    Stream<SoeEntry> stream = soeArraylist.stream();
    List<Predicate<SoeEntry>> allPredicates = new ArrayList<Predicate<SoeEntry>>();
    
    if(comboBoxDoys.getItemCount()  > 0 && comboBoxDoys.getSelectedIndex()  > 1) stream = stream.filter(p -> p.getEntryDoy().equals(comboBoxDoys.getSelectedItem()));
    if(comboBoxSoeSC.getItemCount() > 0 && comboBoxSoeSC.getSelectedIndex() > 1) stream = stream.filter(p -> p.getEntryGSAT().contains(comboBoxSoeSC.getSelectedItem().toString()));
 
    if(!chckbxTTCF1.isSelected() && !chckbxTTCF2.isSelected() && !chckbxTTCF3.isSelected() && !chckbxTTCF4.isSelected() && !chckbxTTCF5.isSelected() && !chckbxTTCF6.isSelected()) {
        //allPredicates.add(p -> p.getEntryNumber() > 0);
    } else {
        if(chckbxTTCF1.isSelected()) allPredicates.add(p -> p.getEntryTTCF1().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF2.isSelected()) allPredicates.add(p -> p.getEntryTTCF2().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF3.isSelected()) allPredicates.add(p -> p.getEntryTTCF3().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF4.isSelected()) allPredicates.add(p -> p.getEntryTTCF4().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF5.isSelected()) allPredicates.add(p -> p.getEntryTTCF5().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF6.isSelected()) allPredicates.add(p -> p.getEntryTTCF6().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        
        stream = stream.filter(allPredicates.stream().reduce(x->false, Predicate::or));
    }
     
    List<SoeEntry> sortedList = stream
       .sorted(
             Comparator
               .comparing(SoeEntry::getEntryNumber)
              // .thenComparing(SoeEntry::getEntryNumber)
              )
       .collect(Collectors.toList());
       //System.out.println(sortedList);
       sortedList.forEach(System.out::println);

多thx to all:

列出这些组合框,通过getSelectedIndex>1进行过滤,为每个结果组合框应用您当前的管道。问题不清楚:\Question不清楚,但您应该在我想到的您周围的某个地方迭代组合框列表stream@AdirD我更新了我的问题
Predicate<SoeEntry> predicate = comboboxPredicate(combobox1, combobox2, combobox3);

List<SoeEntry> sortedList = soeArraylist.stream()
   .filter(predicate)
   .sorted(Comparator.comparing(SoeEntry::getEntryGSAT)
                     .thenComparing(SoeEntry::getEntryNumber))
   .collect(Collectors.toList());
    Stream<SoeEntry> stream = soeArraylist.stream();
    List<Predicate<SoeEntry>> allPredicates = new ArrayList<Predicate<SoeEntry>>();
    
    if(comboBoxDoys.getItemCount()  > 0 && comboBoxDoys.getSelectedIndex()  > 1) stream = stream.filter(p -> p.getEntryDoy().equals(comboBoxDoys.getSelectedItem()));
    if(comboBoxSoeSC.getItemCount() > 0 && comboBoxSoeSC.getSelectedIndex() > 1) stream = stream.filter(p -> p.getEntryGSAT().contains(comboBoxSoeSC.getSelectedItem().toString()));
 
    if(!chckbxTTCF1.isSelected() && !chckbxTTCF2.isSelected() && !chckbxTTCF3.isSelected() && !chckbxTTCF4.isSelected() && !chckbxTTCF5.isSelected() && !chckbxTTCF6.isSelected()) {
        //allPredicates.add(p -> p.getEntryNumber() > 0);
    } else {
        if(chckbxTTCF1.isSelected()) allPredicates.add(p -> p.getEntryTTCF1().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF2.isSelected()) allPredicates.add(p -> p.getEntryTTCF2().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF3.isSelected()) allPredicates.add(p -> p.getEntryTTCF3().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF4.isSelected()) allPredicates.add(p -> p.getEntryTTCF4().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF5.isSelected()) allPredicates.add(p -> p.getEntryTTCF5().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        if(chckbxTTCF6.isSelected()) allPredicates.add(p -> p.getEntryTTCF6().contains(getScHex(comboBoxSoeSC.getSelectedItem().toString()).getScGSAT()));
        
        stream = stream.filter(allPredicates.stream().reduce(x->false, Predicate::or));
    }
     
    List<SoeEntry> sortedList = stream
       .sorted(
             Comparator
               .comparing(SoeEntry::getEntryNumber)
              // .thenComparing(SoeEntry::getEntryNumber)
              )
       .collect(Collectors.toList());
       //System.out.println(sortedList);
       sortedList.forEach(System.out::println);