9

I want to transform a string of text to a dictionary, which contains all the unique words as a key, and translation as a value.

I know how to transform a String into a stream containing unique words (Split -> List -> stream() -> distinct()), and I have translation service available, but what is the most convenient way to reduce the stream into Map with the original element and it's translation in general?

2
  • 3
    I think you're looking for Collectors.toMap(...) Commented Apr 12, 2017 at 8:28
  • 1
    Could you please post your code? What you tried to do? Commented Apr 12, 2017 at 8:28

3 Answers 3

12

You can directly do that via collect:

yourDistinctStringStream
.collect(Collectors.toMap(
    Function.identity(), yourTranslatorService::translate
);

This returns a Map<String, String> where the map key is the original string and the map value would be the translation.

Sign up to request clarification or add additional context in comments.

Comments

5

Suppose you have a list of strings "word1", "word2", "wordN" with no repetitions:

This should solve the the problem

List<String> list = Arrays.asList("word1", "word2", "workdN");
    
Map<String, String> collect = list.stream()
   .collect(Collectors.toMap(s -> s, s -> translationService(s)));

This will return, the insertion order is not maintained.

{wordN=translationN, word2=translation2, word1=translation1}

Comments

1

Try the following code:

public static void main(String[] args) {
    String text = "hello world java stream stream";

    Map<String, String> result = new HashSet<String>(Arrays.asList(text.split(" "))).stream().collect(Collectors.toMap(word -> word, word -> translate(word)));

    System.out.println(result);
}

private static String translate(String word) {
    return "T-" + word;
}

Will give you output:

{java=T-java, world=T-world, stream=T-stream, hello=T-hello}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.