Как справиться с особым условием в карте потоков java8 - PullRequest
0 голосов
/ 01 июня 2018

У меня есть класс 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);

Я получаю все имена строк, добавленные с помощью:не получать значение типа, если имя вопроса является Специальным.

Пожалуйста, дайте мне знать, какие изменения должны быть сделаны.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Это должно работать

  list.stream()
      .filter(Question::isAdded)
      .map(item-> item.getName().equals("Special") ? item.getType() : item.getName())
      .collect(Collectors.joining(":"))
0 голосов
/ 01 июня 2018

Вы можете включить условие в лямбда-выражение, переданное map():

.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(":"));

PS По вашей фразе было не ясно, хотите ли вы, чтобы строка "Значение специального типа"использоваться, если имя «Специальное», или использовать другое значение, которое вы не указали, как получить.

...