如何在java8流的地图中处理特殊条件

时间:2018-06-01 07:58:18

标签: java java-8 java-stream

我有一个Question课程如下:

public class Question {
    private String name;
    private String type;
    private boolean isAdded;
    ...
    getters and setters
}

我想要一个问题列表中的所有问题,其中isAdded = true附加了':'如果问题名称是特殊的,那么特殊类型值。

最终的字符串应如下所示:

questionname1:questionname2:Special-type value:questionname4

我写道:

List<String> slist = questionList.stream().filter(q -> q.isAdded() == true).map(name-> name.getName()).collect(Collectors.toList());

String final = String.join(":", slist);

我将所有字符串名称附加为:但如果问题名称为Special,则不要获取类型值。

请让我知道应该做出哪些改变。

2 个答案:

答案 0 :(得分:4)

这应该有效

  list.stream()
      .filter(Question::isAdded)
      .map(item-> item.getName().equals("Special") ? item.getType() : item.getName())
      .collect(Collectors.joining(":"))

答案 1 :(得分:1)

您可以在传递给map()的lambda表达式中包含一个条件:

.map(q -> q.getName().equals("Special") ? "Special-type value" : q.getName())

完整的Stream管道将是:

List<String> slist = 
    questionList.stream()
                .filter(q -> q.isAdded())
                .map(q -> q.getName().equals("Special") ? "Special-type value" : q.getName())
                .collect(Collectors.toList());

顺便说一句,如果你想加入List到一个String,你可以直接这样做:

String finalValue = 
    questionList.stream()
                .filter(q -> q.isAdded())
                .map(q -> q.getName().equals("Special") ? "Special-type value" : q.getName())
                .collect(Collectors.joining(":"));

P.S。如果你想要字符串&#34;特殊类型值&#34;那么你的措词就不清楚了。当名称为&#34; Special&#34;时使用,或使用您未指定如何获取的其他值。