简体   繁体   English

我如何将其转换为 java stream

[英]How can i convert it to java stream

I am pretty new to java8 streams .我对java8 streams很陌生。 I was trying to work on collection of objects using stream .我正在尝试使用stream处理对象集合。 But not able to achieve in precise way.但无法以精确的方式实现。 Below is the snippet which I achieved (which is giving wrong result).下面是我实现的代码片段(给出了错误的结果)。 expected end result is List<String> of "Names email@test.com".预期的最终结果是“Names email@test.com”的List<String> recordObjects is collection of object recordObjects 是 object 的集合

choices = recordObjects.stream()
                    .filter(record -> record.getAttribute
                            (OneRecord.AT_RECORD_SUBMITTER_TABLE_EMAIL) != null)
                    .filter(record -> !record.getAttributeAsString
                            (OneRecord.AT_RECORD_SUBMITTER_TABLE_EMAIL).isEmpty())
                    .map(record -> record.getMultiValuedAttribute
                            (OneRecord.AT_RECORD_SUBMITTER_TABLE_EMAIL, String.class))
                    .flatMap(Collection::stream)
                    .map(email -> getFormattedEmailAddress(ATTRI_AND_RECORD_CONTACT_DEFAULT_NAME, email))
                    .collect(Collectors.toList());

but below is the exact logic i want to implement using streams.但下面是我想使用流实现的确切逻辑。

for (CallerObject record : recordObjects) {
                List<String> emails = record.getMultiValuedAttribute(
                    OneRecord.AT_RECORD_SUBMITTER_TABLE_EMAIL, String.class);
                List<String> names = record.getMultiValuedAttribute(
                    OneRecord.AT_RECORD_SUBMITTER_TABLE_NAME, String.class);
                int N = emails.size();
                for (int i = 0 ; i < N ; i++) {
                    if(!isNullOrEmpty(emails.get(i)))
                    {
                        choices.add(getFormattedEmailAddress(isNullOrEmpty(names.get(i)) ?
                                ATTRI_AND_RECORD_CONTACT_DEFAULT_NAME : names.get(i) , emails.get(i)));
                    }
                }
            }

Since we don't know the getFormattedEmailAddress method, I used String.format instead to achieve the desired representation "Names email@test.com" :由于我们不知道getFormattedEmailAddress方法,因此我使用 String.format 来实现所需的表示形式"Names email@test.com"

// the mapper function: using String.format
Function<RecordObject, String> toEmailString =  r -> {
  String email = record.getMultiValuedAttribute(OneRecord.AT_RECORD_SUBMITTER_TABLE_EMAIL, String.class);
  String name = record.getMultiValuedAttribute(OneRecord.AT_RECORD_SUBMITTER_TABLE_NAME, String.class);
  if (email != null) {
    return String.format("%s %s", name, email);
  } else {
    return null;
  }
};

choices = recordObjects.stream()
  .map(toEmailString)  // map to email-format or null
  .filter(Objects::nonNull)  // exclude null strings where no email was found
  .collect(Collectors.toList());

Changed your older version code to Java 8将您的旧版本代码更改为 Java 8

        final Function<RecordedObject, List<String>> filteredEmail = ro -> {
            final List<String> emails = ro.getMultiValuedAttribute(
                OneRecord.AT_RECORD_SUBMITTER_TABLE_EMAIL, String.class);
            final List<String> names = ro.getMultiValuedAttribute(
                OneRecord.AT_RECORD_SUBMITTER_TABLE_NAME, String.class);


            return IntStream.range(0, emails.size())
                .filter(index -> !isNullOrEmpty(emails.get(index)))
                .map(index -> getFormattedEmailAddress(isNullOrEmpty(names.get(index)) ?
                    ATTRI_AND_RECORD_CONTACT_DEFAULT_NAME : names.get(index) , emails.get(index)))
                .collect(Collectors.toList());
        };

        recordObjects
            .stream()
            .map(filteredEmail)
            .flatMap(Collection::stream)
            .collect(Collectors.toList());

如何转换 ArrayList<string> 至 ArrayList<object> using.collect(Collectors.toList() 在 Java stream<div id="text_translate"><p> 如何在 Java stream 中使用.collect(Collectors.toList()将ArrayList&lt;String&gt;转换为ArrayList&lt;Object&gt;</p><p> 之前我用过</p><pre>CommonList = detailUtils.SelectIDValueGetterObservable(getActivity()).stream().forEach(i -&gt; CommonList.add(new foo(i));`</pre><p> 但是我遇到了这些<strong>副作用</strong></p><p> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" rel="nofollow noreferrer">https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html</a></p><p> 这建议.collect(Collectors.toList()</p><p> 我们该怎么做</p></div></object></string> - How can I convert ArrayList<String> to ArrayList<Object> using .collect(Collectors.toList() in Java stream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将其转换为使用java流? - How can I convert this to use a java stream? 我如何将此for循环转换为Java 8流模拟 - How can I convert this for loop to java 8 stream analog (Java ->Kotlin) 如何转换这段代码?(流,过滤器) - (Java ->Kotlin) How can I convert this code?(Stream, filter) 如何将Stream转换为Int? - How can I convert a Stream into an Int? 我如何转换流<Byte>到输入流 - How can I convert Stream<Byte> to InputStream 如何将字符串流转换为字符串流对? - How can I convert a Stream of Strings to Stream of String pairs? 如何使用流和lambda转换包含简单for循环的java代码? - How can I convert my java code containing simple for loop using stream and lambda? 如何转换 ArrayList<string> 至 ArrayList<object> using.collect(Collectors.toList() 在 Java stream<div id="text_translate"><p> 如何在 Java stream 中使用.collect(Collectors.toList()将ArrayList&lt;String&gt;转换为ArrayList&lt;Object&gt;</p><p> 之前我用过</p><pre>CommonList = detailUtils.SelectIDValueGetterObservable(getActivity()).stream().forEach(i -&gt; CommonList.add(new foo(i));`</pre><p> 但是我遇到了这些<strong>副作用</strong></p><p> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" rel="nofollow noreferrer">https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html</a></p><p> 这建议.collect(Collectors.toList()</p><p> 我们该怎么做</p></div></object></string> - How can I convert ArrayList<String> to ArrayList<Object> using .collect(Collectors.toList() in Java stream Java-如何将Scala Stream转换为Java Stream? - Java - How to convert Scala Stream to Java Stream? 如何反序列化 java 中 Stream 中的字符串? - How can I deserialise a String in a Stream in java?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM