diff --git a/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerSequenceValidator.java b/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerSequenceValidator.java
index e1e09fa..e184d27 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerSequenceValidator.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerSequenceValidator.java
@@ -31,9 +31,7 @@
         if (prevOutcome.equals("O")) {
           return false;
         }
-        if (!prevOutcome.substring(2).equals(outcome.substring(2))) {
-          return false;
-        }
+        return prevOutcome.substring(2).equals(outcome.substring(2));
       }
     }
     return true;
diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream.java b/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream.java
index 15e09fd..744d0cb 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream.java
@@ -107,7 +107,7 @@
     List<Span> sentences = new ArrayList<>();
     do {
       do {
-        if (!isTitle || (isTitle && isIncludeTitles)) {
+        if (!isTitle || isIncludeTitles) {
           if (hasPunctuation(sent.getText())) {
             int start = document.length();
             document.append(sent.getText());
@@ -139,9 +139,7 @@
     text = text.trim();
     if (text.length() > 0) {
       char lastChar = text.charAt(text.length() - 1);
-      if (Arrays.binarySearch(ptEosCharacters, lastChar) >= 0) {
-        return true;
-      }
+      return Arrays.binarySearch(ptEosCharacters, lastChar) >= 0;
     }
     return false;
   }
diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentParser.java b/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentParser.java
index aaaa5e7..2e3ae56 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentParser.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentParser.java
@@ -183,10 +183,7 @@
   }
 
   private boolean isSpanAnnotation(BratAnnotation ann) {
-    if (ann instanceof SpanAnnotation && (nameTypes == null || nameTypes.contains(ann.getType()))) {
-      return true;
-    }
-    return false;
+    return ann instanceof SpanAnnotation && (nameTypes == null || nameTypes.contains(ann.getType()));
   }
 }
 
diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocument.java b/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocument.java
index b532bd9..514626c 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocument.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocument.java
@@ -116,10 +116,6 @@
             Pointer pointer = fromSeg(n);
             segments.put(segid, pointer);
           } else if (n.getNodeName().equals("choice")) {
-            boolean have_seg = false;
-            if (have_seg) {
-              continue;
-            }
 
             NodeList choices = n.getChildNodes();
 
@@ -128,7 +124,6 @@
                 if (!checkRejectedParen(choices.item(k))) {
                   NodeList paren_segs = (NodeList) SEG_NODES_ONLY.evaluate(choices.item(k),
                       XPathConstants.NODESET);
-                  have_seg = true;
 
                   for (int l = 0; l < paren_segs.getLength(); l++) {
                     String segid = xmlID(paren_segs.item(l));
@@ -138,7 +133,6 @@
                 }
               } else if (choices.item(k).getNodeName().equals("seg")) {
                 if (!checkRejected(choices.item(k))) {
-                  have_seg = true;
                   String segid = xmlID(choices.item(k));
                   Pointer pointer = fromSeg(choices.item(k));
                   segments.put(segid, pointer);
diff --git a/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerME.java b/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerME.java
index 1d332ac..6dc3591 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerME.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerME.java
@@ -89,8 +89,7 @@
 
   public String[] lemmatize(String[] toks, String[] tags) {
     String[] ses = predictSES(toks, tags);
-    String[] lemmas = decodeLemmas(toks, ses);
-    return lemmas;
+    return decodeLemmas(toks, ses);
   }
 
   @Override public List<List<String>> lemmatize(List<String> toks,
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/BasicContextGenerator.java b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/BasicContextGenerator.java
index c84c687..9f77ef2 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/BasicContextGenerator.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/BasicContextGenerator.java
@@ -41,8 +41,7 @@
    * Builds up the list of contextual predicates given a String.
    */
   public String[] getContext(String o) {
-    String s = (String) o;
-    return s.split(separator);
+    return o.split(separator);
   }
 
 }
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparableEvent.java b/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparableEvent.java
index 5ab87b5..0c821bc 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparableEvent.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparableEvent.java
@@ -73,12 +73,7 @@
       }
     }
 
-    int comparePredIndexesLength = Integer.compare(predIndexes.length, ce.predIndexes.length);
-    if (comparePredIndexesLength != 0) {
-      return comparePredIndexesLength;
-    }
-
-    return 0;
+    return Integer.compare(predIndexes.length, ce.predIndexes.length);
   }
 
   @Override
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparablePredicate.java b/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparablePredicate.java
index b622c61..fb41ff9 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparablePredicate.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparablePredicate.java
@@ -46,12 +46,7 @@
       }
     }
 
-    int compareOutcomesLength = Integer.compare(outcomes.length, cp.outcomes.length);
-    if (compareOutcomesLength != 0) {
-      return compareOutcomesLength;
-    }
-
-    return 0;
+    return Integer.compare(outcomes.length, cp.outcomes.length);
   }
 
   @Override
diff --git a/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceValidator.java b/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceValidator.java
index 19700fb..9916c93 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceValidator.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceValidator.java
@@ -44,9 +44,7 @@
         String nameType = NameFinderME.extractNameType(outcome);
         if (previousNameType != null || nameType != null) {
           if (nameType != null) {
-            if (nameType.equals(previousNameType)) {
-              return true;
-            }
+            return nameType.equals(previousNameType);
           }
           return false; // outcomes types are not equal
         }
@@ -57,10 +55,8 @@
       if (outcome.endsWith(BilouCodec.START)
           || outcome.endsWith(BilouCodec.OTHER)
           || outcome.endsWith(BilouCodec.UNIT)) {
-        if (outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.START)
-            || outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.CONTINUE)) {
-          return false;
-        }
+        return !outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.START)
+                && !outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.CONTINUE);
       }
     }
 
diff --git a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderSequenceValidator.java b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderSequenceValidator.java
index bb6700e..3054cb8 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderSequenceValidator.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderSequenceValidator.java
@@ -45,9 +45,7 @@
         String nameType = NameFinderME.extractNameType(outcome);
         if (previousNameType != null || nameType != null ) {
           if (nameType != null ) {
-            if (nameType.equals(previousNameType)) {
-              return true;
-            }
+            return nameType.equals(previousNameType);
           }
           return false; // outcomes types are not equal
         }
diff --git a/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/ParserEventStream.java b/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/ParserEventStream.java
index 5390501..b4f6ac5 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/ParserEventStream.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/ParserEventStream.java
@@ -147,7 +147,7 @@
       }
       //perform build stages
       while (!parent.getType().equals(AbstractBottomUpParser.TOP_NODE) && parent.getLabel() == null) {
-        if (parent.getLabel() == null && !prevParent.getType().equals(parent.getType())) {
+        if (!prevParent.getType().equals(parent.getType())) {
           //build level
           if (debug) System.err.println("Build: " + parent.getType() + " for: " + currentChunks[ci]);
           if (etype == ParserEventTypeEnum.BUILD) {
diff --git a/opennlp-tools/src/main/java/opennlp/tools/postag/POSSample.java b/opennlp-tools/src/main/java/opennlp/tools/postag/POSSample.java
index 459905a..0bc9f41 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/postag/POSSample.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/postag/POSSample.java
@@ -158,6 +158,6 @@
           && Arrays.equals(getTags(), a.getTags());
     }
 
-    return this == obj;
+    return false;
   }
 }
diff --git a/opennlp-tools/src/main/java/opennlp/tools/util/model/BaseModel.java b/opennlp-tools/src/main/java/opennlp/tools/util/model/BaseModel.java
index 8c33a82..a6a9a22 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/util/model/BaseModel.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/util/model/BaseModel.java
@@ -334,7 +334,7 @@
   private String getEntryExtension(String entry) throws InvalidFormatException {
     int extensionIndex = entry.lastIndexOf('.') + 1;
 
-    if (extensionIndex == -1 || extensionIndex >= entry.length())
+    if (extensionIndex >= entry.length())
         throw new InvalidFormatException("Entry name must have type extension: " + entry);
 
     return entry.substring(extensionIndex);
