将java版本1.8转换为1.7兼容

时间:2015-05-15 06:28:25

标签: java stub

要明确我不是java开发人员。

我有为1.8版编写的java代码。但是,java.util.function在1.7版本中不可用,因此我无法编译代码。如何编译\转换代码以使其与1.7版编译器兼容?

下面是代码

import java.util.*;
import java.util.function.Predicate;     
public List<PersonSearchResult> searchPersonListAsPerson( Person bean, short minScore, int maxResults, String cvwName, Person.PersonSource[] sources,  Person.PersonAttribute[] attributes) throws MasterDataServiceException {
            logServiceBegin(log, "searchPersonListAsPerson");
            PersonMapper mapper = new PersonMapper();
            List<PersonSearchResult> searchResults = searchForRecordList( mapper, bean, PersonEntityId.getStaticEntType(), minScore, maxResults, cvwName, sources, attributes);        
            if(searchResults != null && searchResults.size() > 1) {
                PersonPredicate pPredicate = new PersonPredicate();
                //TODO: Where to get the srccode as per below??
                //pPredicate.setSrcCodeToTest("CRDSCNCTP");
                //searchResults = searchResults.stream().filter(pPredicate).collect(Collectors.toList());
                //TODO: what if there is no result with that src code searchResults will become empty
                if(searchResults != null && searchResults.size() > 1){
                    Collections.sort(searchResults, new Comparator<PersonSearchResult>(){
                        public int compare(PersonSearchResult a, PersonSearchResult b) {
                            if(isNullOrEmpty(a.getPerson().getPerAttributesList()) && isNullOrEmpty(b.getPerson().getPerAttributesList())){
                                return 0;
                            }else if(isNullOrEmpty(b.getPerson().getPerAttributesList())){
                                return -1;
                            }else if(isNullOrEmpty(a.getPerson().getPerAttributesList())){
                                return 1;
                            }else{
                                int comparison = a.getPerson().getPerAttributesList().get(0).getStatus().compareToIgnoreCase(b.getPerson().getPerAttributesList().get(0).getStatus());
                                return comparison == 0 ? b.getPerson().getPerAttributesList().get(0).getUpdateDate().compareTo(a.getPerson().getPerAttributesList().get(0).getUpdateDate()) : comparison;
                            }
                        }
                    });
                }
            }
            logServiceEnd(log, "searchPersonListAsPerson");
            cleanUserCredentials();
            return searchResults;
        }

        private boolean isNullOrEmpty(List<Memperson> list){
            return list == null || list.isEmpty();
        }


class PersonPredicate implements Predicate<PersonSearchResult>{
        String srcCodeToTest;
        public boolean test(PersonSearchResult person) {                
            return srcCodeToTest.equalsIgnoreCase(person.getPerson().getPersonId().getSrcCode());
        }
        public void setSrcCodeToTest(String srcCodeToTest){
            this.srcCodeToTest = srcCodeToTest;
        }

3 个答案:

答案 0 :(得分:1)

可以使用java 8流编写代码:

return searchResults.stream()
        .filter((PersonSearchResult p) -> "CRDSCNCTP".equalsIgnoreCase(p.getPerson().getPersonId().getSrcCode()))
        .sorted(new PersonComparator())
        .collect(Collectors.toList());

如果要以java 7兼容的形式/语法重写java 8表达式,可以通过以下方式完成:

 PersonPredicate predicate = new PersonPredicate("CRDSCNCTP");
 List<PersonSearchResult> searchResults = ...;
 List<PersonSearchResult> filteredResult = filter(searchResult, predicate);
 List<PersonSearchResult> result = Collections.sort(filteredResult , new PersonComparator()); 

其中过滤器类似于

 private static List<PersonSearchResult> filter(List<PersonSearchResult> sourceList, Predicate<PersonSearchResult> predicate) {
     List<PersonSearchResult> result = new ArrayList<PersonSearchResult>();
     if (sourceList != null) {
        for (PersonSearchResult p: sourceList ) { 
            if ( p != null  && predicate.test(p) ){
              result.add(p);  
        }
     }
     return result;        
 }

我们仍然需要定义Predicate接口。 通过查看Java 8 API以及我们只需要test方法的知识,我们可以将其定义为:

interface Predicate<T> {
  public boolean test(T t); 
}

PersonComparator就是你所定义为内心阶级的内容。

答案 1 :(得分:0)

好的,你问了代码,所以你去了:

import java.util.*;
import com.google.common.base.Predicate;     
import com.google.common.collect.Lists;
import com.google.common.collect.Iterables;

public class YourClassName {
public List<PersonSearchResult> searchPersonListAsPerson( Person bean, short minScore, int maxResults, String cvwName, Person.PersonSource[] sources,  Person.PersonAttribute[] attributes) throws MasterDataServiceException {
            logServiceBegin(log, "searchPersonListAsPerson");
            PersonMapper mapper = new PersonMapper();
            List<PersonSearchResult> searchResults = searchForRecordList( mapper, bean, PersonEntityId.getStaticEntType(), minScore, maxResults, cvwName, sources, attributes);        
            if(searchResults != null && searchResults.size() > 1) {
            List<PersonSearchResult> results = Lists.new ArrayList()
                PersonPredicate pPredicate = new PersonPredicate();
                pPredicate.setSrcCodeToTest("CRDSCNCTP");
                Iterable<PersonSearchResult> result = Iterables.filter(searchResults, pPredicate);
                List result = Lists.newArrayList(result);
                if(result.size() > 0){
                    Collections.sort(result, new Comparator<PersonSearchResult>(){
                        public int compare(PersonSearchResult a, PersonSearchResult b) {
                            if(isNullOrEmpty(a.getPerson().getPerAttributesList()) && isNullOrEmpty(b.getPerson().getPerAttributesList())){
                                return 0;
                            }else if(isNullOrEmpty(b.getPerson().getPerAttributesList())){
                                return -1;
                            }else if(isNullOrEmpty(a.getPerson().getPerAttributesList())){
                                return 1;
                            }else{
                                int comparison = a.getPerson().getPerAttributesList().get(0).getStatus().compareToIgnoreCase(b.getPerson().getPerAttributesList().get(0).getStatus());
                                return comparison == 0 ? b.getPerson().getPerAttributesList().get(0).getUpdateDate().compareTo(a.getPerson().getPerAttributesList().get(0).getUpdateDate()) : comparison;
                            }
                        }
                    });
                }
            }
            logServiceEnd(log, "searchPersonListAsPerson");
            cleanUserCredentials();
            return searchResults;
        }

        private boolean isNullOrEmpty(List<Memperson> list){
            return list == null || list.isEmpty();
        }

}
class PersonPredicate implements Predicate<PersonSearchResult>{
        String srcCodeToTest;
        public boolean apply(PersonSearchResult person) {                
            return srcCodeToTest.equalsIgnoreCase(person.getPerson().getPersonId().getSrcCode());
        }
        public void setSrcCodeToTest(String srcCodeToTest){
            this.srcCodeToTest = srcCodeToTest;
        }
}

请将guava库添加到您的项目中。如果有一些错误,请告诉我们。我赶时间做了。

答案 2 :(得分:0)

在不添加任何外部依赖项的情况下执行此操作的最简单方法是自行过滤集合:

//TODO: Where to get the srccode as per below??
srcCode = "CRDSCNCTP";
searchResults = new LinkedList<>(searchResults);
Iterator<PersonSearchResult> it = searchResults.iterator();
while(it.hasNext()) {
    PersonSearchResult p = it.next();
    String pSrcCode = p.getPerson().getPersonId().getSrcCode();
    if(!srcCode.equalsIgnoreCase(pSrcCode)) {
        it.remove();
    }
}
if(searchResults != null && searchResults.size() > 1){
    ...